在窗口小部件属性中覆盖模型上设置的max_length

时间:2018-02-16 08:28:46

标签: django django-forms django-widget

Model我设置字段的最大长度:

short_description = models.CharField(max_length=405)

在小部件属性的ModelForm中,我将minlength设置为maxlength:

class ItemModelForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['name', 'short_description', 'description']
    widgets = {
            'name': TextInputWidget(attrs={'placeholder': 'Name*'}),
        'short_description': TextareaWidget(attrs={'minlength': 200, 'maxlength': 400}) 

}

HTML中的问题minlegth来自小部件,但maxlength仍然取自模型(405而不是400)。

我希望widget属性覆盖模型属性。

2 个答案:

答案 0 :(得分:4)

Meta类中的widgets属性仅修改小部件,而不修改字段属性本身。您需要做的是重新定义您的模型表单字段。

class ItemModelForm(forms.ModelForm):
    short_description = forms.CharField(max_length=400, min_length=200, widget=TextareaWidget())

    class Meta:
        model = Item
        fields = ['name', 'short_description', 'description']
        widgets = {
            'name': TextInputWidget(attrs={'placeholder': 'Name*'}),
        }

答案 1 :(得分:1)

class ItemModelForm(forms.ModelForm):
    short_description = forms.CharField(
        max_length = 400,
        min_length = 200,
        widget=forms.Textarea(
        )
    )

    class Meta:
        model = Item
        fields = ['name', 'short_description', 'description']
        widgets = {
        'name': TextInputWidget(attrs={'placeholder': 'Name*'}),
        }