在Django formsets中设置HTML required属性

时间:2016-07-06 08:21:38

标签: django django-templates

要实现客户端验证,使用户在提交前填写非空字段,我使用以下代码:

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(...))

2 个答案:

答案 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是出于某些原因让我头疼,主要是因为它接受值而不是查询集,这意味着我不得不打扰外键关系。