如何向 Django 表单字段添加必需属性

Muh*_*uri 4 html python django

我想要一个 Django 表单字段呈现为:

<input type="text" name="username" required>
Run Code Online (Sandbox Code Playgroud)

但当我尝试时username.widget.attrs['required'] = ''我得到类似的东西:

<input type="text" name="username" required="">
Run Code Online (Sandbox Code Playgroud)

required有没有一种方法可以在生成的 HTML 表单中显示独立的 HTML5 属性?

我在 Python 2.6 上使用 Django 1.6,因为它的价值。

mar*_*dev 6

您需要以required有效的格式定义属性。

username.widget.attrs['required'] = 'required'
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解更多详细信息: /sf/answers/210908281/

  • 对于那些正在学习 Django 的人来说,解释一下这一行应该添加到哪里会很有用。 (8认同)

kfa*_*fan 5

@mariodev 是正确的。如果您想要更优雅的方式来执行此操作,请参阅/sf/answers/2641717991/(相关部分复制如下):

如果你真的想编写优雅、DRY 的代码,你应该创建一个基本表单类,动态查找所有必需的字段并为你修改它们的小部件所需属性(你可以将其命名为任何你想要的名称,但“BaseForm”似乎很合适) :

from django.forms import ModelForm

class BaseForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(BaseForm, self).__init__(*args, **kwargs)
        for bound_field in self:
            if hasattr(bound_field, "field") and bound_field.field.required:
                bound_field.field.widget.attrs["required"] = "required"
Run Code Online (Sandbox Code Playgroud)

然后让所有 Form 对象都从它下降:

class UserForm(BaseForm):
    class Meta:
        model = User
        fields = []

    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)
    email = forms.EmailField(required=True, max_length=100)
Run Code Online (Sandbox Code Playgroud)