使用 Django 表单覆盖最大长度输入 {{ form.as_p }}
Override maxlength input using Django form {{ form.as_p }}
在 Django 中,当我从模型创建表单时,在模板中我使用 {{ form.as_p }}
并且对于文本输入,它创建了以下代码:
<input id="id_var1" maxlength="8" name="var1" type="text">
是否可以用我在 views.py
中的变量覆盖 maxlength
值(在本例中为“8”)?
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))
在您的表单字段中,您可以覆盖小部件并为自定义 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'
在 Django 中,当我从模型创建表单时,在模板中我使用 {{ form.as_p }}
并且对于文本输入,它创建了以下代码:
<input id="id_var1" maxlength="8" name="var1" type="text">
是否可以用我在 views.py
中的变量覆盖 maxlength
值(在本例中为“8”)?
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))
在您的表单字段中,您可以覆盖小部件并为自定义 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'