使用 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'