2011-12-09 5 views
2

のためのユーザーフォームの拡張、この中で説明するように、私はSO投稿私のユーザーモデルを拡張: Extending the User model with custom fields in Djangoカスタムユーザー

しかし、私はフォームを作成し、ユーザーを作成しようとしているが、私は以下の取得:

は、「メンバーのオブジェクトには、属性 'set_password'

ここに私のモデルの形で持っていません。

class Members(models.Model): 
    user = models.OneToOneField(User) 

GENDER_CHOICES = (...) 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 
date_of_birth  = models.DateField() 
class Meta: 
    db_table='members' 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Members.objects.create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

....と私のフォームを....

class SignUpForm(UserCreationForm): 
    GENDER_CHOICES = (...) 
    email = forms.EmailField(label='Email address', max_length=75) 
    first_name = forms.CharField(label='First Name') 
    last_name = forms.CharField(label='Last Name') 
    gender = forms.ChoiceField(widget=RadioSelect, choices=GENDER_CHOICES) 
    date_of_birth = forms.DateField(initial=datetime.date.today) 

    class Meta: 
     model = Members 
     fields = ('username', 'email','first_name', 'last_name') 

あなたのUserモデルは(あなたがMember呼ばれてきた)UserProfileを作成することである延長することを選んだおかげで、事前

答えて

2

のメソッドので、私は、Djangoので新たなんです。 A Memberで、のサブクラスはUserなので、メソッド(set_passwordなど)を呼び出すことはできません。

SignUpFormのMetaモデルは引き続きUserであり、拡張されたUserProfileを取得するには、user.get_profile()を呼び出す必要があります。たとえば、ユーザーの性別を取得するには、user.get_profile().genderとします。

ユーザープロファイルの拡張の詳細については、https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-usersを参照してください。

+0

お返事ありがとうございます。フォームオブジェクトの保存パラメータをオーバーライドするか、user.get_profile()を実行して新しいuserprofileオブジェクトを保存しますか? (私はメンバーをUserProfileに改名しました) – Paul

+0

[SOの質問](http://stackoverflow.com/questions/1727564/how-to-create-a-userprofile-form-in-django-with- first-name-last -name-modificati)があなたを助けてくれるかもしれません。その解決策は '' save() ''をオーバーライドします。私はUserProfileを使用しなければならないことは一度も書いていません(すべてのプロジェクトでUserクラスが拡張されています)。私はあまりにもあなたを助けることはできません。 –

+1

get_profileはdjango 1.5から廃止され、1.7で削除されました。 – brunch875

関連する問題