我有一个像这样的modelformset工厂:
形式:
class AwesomeModelForm(ModelForm):
class Meta:
model = AwesomeModel
fields = ('thing', 'field_2', 'field_3')
widgets = {
'thing': HiddenInput(),
}
查看:
class AwesomeView(TemplateView):
formset = modelformset_factory(AwesomeModel, form=AwesomeModelForm,
can_delete=True)
def get_context_data(self, **kwargs):
self.id = self.kwargs['id']
self.thing = Thing.objects.get(id=self.id)
formset = self.allocate_formset(queryset=AwesomeModel.objects\
.filter(thing=self.thing))
context = super(AllocateLeave, self).get_context_data(**kwargs)
context['formset'] = formset
return context
我想使用初始数据预填充modelformset_factory。
formset = self.allocate_formset(queryset=AwesomeModel.objects.filter(thing=self.thing), initial=[{'thing': self.thing,}])
Django似乎认为" initial"的应用表示表单已更改,因此,如果我想更改表单值,而不是更改'额外'形式,验证失败,因为额外的'形式不完整。 e.g。
for form in new_formset.forms:
print form.has_changed()
为'额外'返回True带有inital集的字段,如果未在formset声明中设置initial,则返回False。
虽然迭代formset中的表单可以保存每个现有表单,但如果我想删除表单,或者应用任何表单集范围的验证,表单将无法通过验证。
我认为解决方案可能是使用干净的方法来处理“事情”。字段,但我无法看到如何访问modelform类中视图的上下文变量。这是正确的方法还是我应该追求另一种选择?
由于