1 回答

TA贡献1846条经验 获得超7个赞
随着UpdateView这是一个有点棘手。因此,为了初始化表单的数据,您需要在视图本身而不是在表单中进行初始化。
所以这里是你如何执行你在使用时所做的事情UpdateView:
class DataSourceUpdateView(UpdateView):
model = DataSource
form_class = DataSourceForm
template_name = 'engine/datasource_update.html'
# An empty dict or add an initial data to your form
initial = {}
# And don't forget your success URL
# or use reverse_lazy by URL's name
# Or better, override get_success_url() method
# And return your success URL using reverse_lazy
sucess_url = '/'
def get_initial(self):
"""initialize your's form values here"""
base_initial = super().get_initial()
# So here you're initiazing you're form's data
base_initial['dataset_request'] = DatasetRequest.objects.filter(
creator=self.request.user
)
return base_initial
#... The rest of your view logic
你的形式将是:
class DataSourceForm(forms.ModelForm):
class Meta:
model = DataSource
exclude = (
'creator',
'vote_score',
'num_vote_up',
'num_vote_down',
'file_size',
'slug'
)
奖金:
为了理解为什么需要初始化表单的数据,您需要查看`UpdateView's MRO,请访问此文档链接:
...
django.views.generic.edit.FormMixin # => 这个是处理表单
...
并且FormMixin
有这些属性和方法请访问文档链接,它们是:
initial:包含表单初始数据的字典。...
get_initial():检索表单的初始数据。默认情况下,返回初始值的副本。
此外,我建议您查看FormMixin
它们的属性和方法,以便了解如何覆盖它们或让 Django 为您施展魔法:D。请参阅此文档链接
添加回答
举报