簡體   English   中英

如何將必需屬性添加到 Django 表單字段

[英]How to add required attribute to a Django form field

我想將 Django 表單域呈現為:

<input type="text" name="username" required>

但是當我嘗試username.widget.attrs['required'] = ''我得到類似的東西:

<input type="text" name="username" required="">

有沒有一種方法可以在生成的 HTML 表單中顯示required的獨立 HTML5 屬性?

我在 Python 2.6 上使用 Django 1.6,物有所值。

您需要以有效格式定義required屬性。

username.widget.attrs['required'] = 'required'

請在此處查看更多詳細信息: https : //stackoverflow.com/a/3012975/1566605

@mariodev是正確的。 如果您希望以更優雅的方式執行此操作,請參閱https://stackoverflow.com/a/37738828/2812260 (相關部分復制如下):

如果您真的想編寫精美的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"

然后讓您所有的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)

如果您想要基於每個表單而不是每個模型的聲明性選項,這是我的解決方案:

from django import forms

class RequiredFieldsModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(RequiredFieldsModelForm, self).__init__(*args, **kwargs)
        for bound_field in self:
            if (
                hasattr(bound_field, "field") and
                bound_field.name in self.Meta.required_fields
            ):
                bound_field.field.widget.attrs["required"] = "required"


# Your forms
class UserForm(RequiredFieldsModelForm):
    class Meta:
        required_fields = ['username']
        model = User

只需將 required 屬性設置為小部件,如下所示:

self.fields['field_name'].widget = forms.TextInput(attrs={'required':'required'})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM