在Django中,当我从模型创建表单时,在模板中我使用{{ form.as_p }}
,对于文本输入,它会创建以下代码:
<input id="id_var1" maxlength="8" name="var1" type="text">
是否可以使用maxlength
中的变量覆盖views.py
值(在本例中为&#34; 8&#34;)?
答案 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))