2

私は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を追加) した場合、この問題は発生しません。フィールドに表示する属性が必要な場合は、フォームのフィールドをオーバーライドして、 DRY原則に反するrequired=Trueを追加する必要があるため、これは問題です。何か不足していますか、それとも何らかのバグですか?

編集: フロッピーフォームを使用していることに言及しませんでした。それが関係しているかもしれません。この問題をさらに調査する必要があります。

4

3 に答える 3

1

これは実際に可能__init__です。必要な属性をウィジェット属性に追加するだけです。

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

于 2016-12-02T14:51:10.557 に答える