在Django扩展自定义用户的用户表单

时间:2011-12-09 06:39:30

标签: python django

我按照此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')

我是Django的新手,所以提前谢谢

1 个答案:

答案 0 :(得分:2)

您选择扩展User模型的方法是创建UserProfile(您称之为Member)。 Member User的子类,因此您无法在其上调用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,了解有关扩展用户个人资料的详情。