繁体   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