Formset Factory Make必填字段

我在Django中使用modelformset_factory来让用户填写未知数量的字段。

我已经填写了必填字段,但是在HTML呈现中,Django并未将required添加到HTML元素中,在线查看这似乎是一个常见问题,但是我没有看到任何适用于此内容的有效答案我想要,我觉得这应该很简单。

如何使Django将所需标签添加到Formset的适当HTML元素?

class ItemForm(forms.ModelForm):
    class Media:
        js = (formset_js_path,)

    class Meta:
        model = PurchaseOrderItems
        fields = ['name','vendor','quantity','price','description']
        labels = {
            'name': 'Item',}

    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        # self.fields['description'] .widget.attrs['required'] = 'required'
        self.empty_permitted = False

        self.fields['description'] = forms.CharField(
            required=False,label='Description',)

    def clean(self):
        """

        :return:
        """
        cleaned_data = super().clean()
        # print(cleaned_data)



ItemFormSet = modelformset_factory(
    PurchaseOrderItems,form=ItemForm,extra=0,min_num=1,validate_min=True,can_delete=True,)

这是为名称字段呈现的HTML,在我的模型中肯定没有required,因此,如果提交此表单,则由于空值而导致DB错误:

<input type="text" name="form-0-name" maxlength="150" class="form-control" id="id_form-0-name">
lookme123 回答:Formset Factory Make必填字段

根据release notes

  

必需的表单字段现在具有必需的HTML属性。设置新   将Form.use_required_attribute属性设置为False可禁用它。的   表单集的表单中未包含必填属性,因为   添加和删​​除时浏览器验证可能不正确   表单集。

因此,如果要禁用,则必须从视图中以这种方式提交表单。这将影响您的所有字段。

form = ItemForm(use_required_attribute=False)

但是,如果您只想影响某些人,则必须执行上一步,并在表单中添加此内容

  def __init__(self,*args,**kwargs):
    super().__init__(*args,**kwargs)
    self.fields['name'].widget.attrs.update({'required': ''})
    self.fields['vendor'].widget.attrs.update({'required': ''})
    self.fields['quantity'].widget.attrs.update({'required': ''})
    self.fields['price'].widget.attrs.update({'required': ''})
    self.fields['description'].widget.attrs.update({'required': 'False'})

另一方面,我看到您没有在表单中使用小部件,还应该使用它们使它工作。

  widgets = {
        'name': forms.TextInput(),'vendor': forms.TextInput(),'quantity': forms.TextInput(),'price': forms.TextInput(),'description': forms.TextInput(),}

我将所有字段都输入为TextInput,但在此处Field types中根据数据类型查找指示的内容。

本文链接:https://www.f2er.com/3055835.html

大家都在问