[英]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.