要实现客户端验证,使用户在提交前填写非空字段,我使用以下代码:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs['class'] = 'form-control'
if field.required == True:
field.widget.attrs['required'] = ''
这会转换为模板中的以下html:
<input class="form-control" ........ required="">
现在,当我使用formset时,所需的HTML属性不会出现在tempalte中。问题是,如何让Django表单从原始表单继承这个必需的属性 - 如果可能的话?
MyFormSet = modelformset_factory(MyModel, fields=(...))
formset = MyFormSet(queryset = MyModel.objects.filter(...))
答案 0 :(得分:1)
如何从MyForm创建formset?
MyFormSet = forms.formset_factory(MyForm)
答案 1 :(得分:0)
花了三个小时后,我在modelformset_factory中通过setting a custom form解决了这个问题。也许它会对其他人有用
MyFormSet = modelformset_factory(MyModel, MyForm)
formset = MyFormSet(queryset = MyModel.objects.filter(...))
有效地指定MyForm 告诉Django继承您在MyForm定义中声明的所有小部件属性。
使用formset_factory是出于某些原因让我头疼,主要是因为它接受值而不是查询集,这意味着我不得不打扰外键关系。