2

「email」などの追加フィールドを使用して UserCreationForm を拡張する方法に関するこの投稿を見つけました。ただし、電子メール フィールドは、事前に作成されたユーザー モデルで既に定義されています。

Django のビルド済み User クラスをさらに拡張する追加のモデル (UserProfile と呼ばれる) を作成しました。UserProfile で定義したこれらのフィールドを UserCreationForm に表示するにはどうすればよいですか?

4

1 に答える 1

11

モデルに応じてフィールドを追加しUserProfile(残念ながら、自分自身を繰り返すことを避けるために a を使用するのは簡単ではありませんModelForm)、オーバーライドされた関数で新しいUserProfileインスタンスを作成して保存しsave()ます。リンク先の投稿からの適応:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class UserCreateForm(UserCreationForm):
    job_title = forms.CharField(max_length=100, required=True)
    age = forms.IntegerField(required=True)

    class Meta:
        model = User

    def save(self, commit=True):
        if not commit:
            raise NotImplementedError("Can't create User and UserProfile without database save")
        user = super(UserCreateForm, self).save(commit=True)
        user_profile = UserProfile(user=user, job_title=self.cleaned_data['job_title'], 
            age=self.cleaned_data['age'])
        user_profile.save()
        return user, user_profile
于 2012-08-11T23:21:45.693 に答える