簡體   English   中英

django:HTML中的必填字段沒有“ required”屬性

[英]django: Required Field Not Having The “required” Attribute in HTML

我是django的新手,到目前為止,我認為這太棒了。 我今天遇到了這個奇怪的問題:我有這個FormModel:

class RegisterForm2(UserCreationForm):
    mobile2 = forms.CharField(
        label=_('Mobile Confirmation'),
        max_length=50,
        required=True,
        widget = forms.TextInput(attrs = {'class':'nocopy'})
    )

    class Meta:
        model = User
        fields = ['username', 'mobile', 'mobile2', 'guardian_mobile']
        labels = {
            'username': _('Government ID'),
        }
        widgets = {
            # workaround since __init__ setting to required doesnt work
            'mobile': forms.TextInput(attrs = {'required':''}),
        }

    def __init__(self, *args, **kwargs):
        super(RegisterForm2, self).__init__(*args, **kwargs)

        self.fields['mobile'].required = True

現在,移動字段在模型中具有blank = True ,但我希望僅在表單中需要它,因此我在__init__中做到了。 現在,它使該字段成為必填字段,但沒有在文本輸入中添加required =“” 現在,如果像我對mobile2字段那樣重寫字段(並添加required = True ),我將不會遇到此問題。 這是一個問題,因為如果我希望所需的屬性顯示在字段中,則必須覆蓋表單中的字段以添加required = True ,這將違反DRY原理。 我是否缺少某些東西,或者這是某種錯誤?

編輯:我沒有提到我正在使用軟盤表格。 可能與此有關。 我必須進一步調查這個問題。

請注意,此答案假設您使用的是常規Django表單,我在提到您使用軟盤表單之前就已編寫了該表單。

Django在呈現表單字段時當前未添加required HTML 5屬性。 在我看來,覆蓋mobile字段聲音的小部件看起來不錯。 您在更改窗口小部件,而不是復制字段,因此我認為您不必擔心它是DRY。

請注意, __init__所需的設置會產生影響-如果您提交的表中包含mobile的空值,則將收到驗證錯誤。 除非您將mobile2字段添加到其小部件attrs中,否則在呈現的HTML中將required它。

Django將在Django 1.10中的表單字段中添加required屬性,請參見故障單#22383

實際上在__init__是可能的。 您只需將所需屬性添加到小部件屬性中:

def __init__(self, *args, **kwargs): super(RegisterForm2, self).__init__(*args, **kwargs) self.fields['mobile'].required = True self.fields['mobile'].widget.attrs['required'] = 'required'

但我希望僅以表格形式要求

'mobile': forms.TextInput(attrs = {'required':''}),

您也可以在views.py中執行此操作。 那就是我更喜歡這樣做的方式。

form.fields['mobile'].widget.attrs['required'] = True 

暫無
暫無

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

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