0

カスタム User モデル フィールドを作成しています。

これを行っているときに、「models.py」と「forms.py」の間でコードを複製していることに気付きました??

例えば:

models.py

class MyUser(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
        db_index=True,
    )

    full_name = forms.CharField(
        max_length=64,
    )
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['full_name']

...


フォーム.py

class RegistrationForm(forms.Form):
    error_css_class = 'error'
    required_css_class = 'required' 

    email = forms.EmailField(
        label=_("Email"),
    )
    full_name = forms.CharField(
        label=_("Full Name"),
    )
    password1 = forms.CharField(
        widget=forms.PasswordInput,
        label=_("Password"),
    )
    password2 = forms.CharField(
        widget=forms.PasswordInput,
        label=_("Password (again)"),
    )
...

ここで、フィールドを 2 回定義していることに気づきましたが、これが必要かどうかはわかりません。必要でない場合は、2 つのフィールドを 1 行に結合する方法もわかりません :(

何か案が?

ありがとう。

4

1 に答える 1

1

ModelForm には、モデルにバインドされたフィールドとバインドされていないフィールドを含めることができます。フォームでフィールドを再定義することなく、モデル フィールドの label 属性をオーバーライドすることもできます。

class RegistrationForm(forms.ModelForm):
    class Meta:
        model = MyUser

    error_css_class = 'error'
    required_css_class = 'required' 

    def __init__(self, *args, **kwargs):
        super(RegistrationForm, self).__init__(*args, **kwargs)
        self.fields['full_name'].label = _("Full Name")

    password2 = forms.CharField(
        widget=forms.PasswordInput,
        label=_("Password (again)"),
    )

ただし、モデルフィールドのラベルをフォームで別の方法で提供している場所はわかりません。モデル レベルでもいつでも label 属性を追加できます。

class MyUser(AbstractBaseUser):
    email = models.EmailField(u'Email Address', max_length=255, unique=True,
        db_index=True)
    full_name = forms.CharField(u'Full Name', max_length=64)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['full_name']
于 2013-08-01T05:11:30.783 に答える