使用Django格式覆盖maxlength输入{{form.as_p}}

时间:2016-01-18 18:10:28

标签: django django-models django-forms django-templates django-views

在Django中,当我从模型创建表单时,在模板中我使用{{ form.as_p }},对于文本输入,它会创建以下代码:

<input id="id_var1" maxlength="8" name="var1" type="text">

是否可以使用maxlength中的变量覆盖views.py值(在本例中为&#34; 8&#34;)?

2 个答案:

答案 0 :(得分:1)

在表单字段中,您可以覆盖窗口小部件并为自定义HTML属性添加attrs参数。

class MyCustomForm(forms.ModelForm):

    var1 = forms.CharField(
        widget=forms.TextInput(attrs={
            # override/add custom HTML attributes in this dictionary
            'maxlength': '20',
        })
    )

    class Meta:
        model = MyCustomModel
        fields = ['var1', ...]

您可以从以下视图更新maxlength

form = MyCustomForm()
form.fields['var1'].widget.attrs['maxlength'] = '20'

答案 1 :(得分:0)

HTML maxlength参数由浏览器处理,而不是由Django的视图处理。您应该调整表单或模板以更改字段的长度:

class YourForm(forms.Form):
    var_1 = forms.CharField(max_length=8)


def your_view(request, *args, **kwargs):
    max_length = int(request.GET['max_length'])
    form = YourForm(request.POST or None)
    form.fields['var_1'].max_length = max_length
    return render(request, 'template.html', dict(form=form))