在Django中扩展用户表单以自定义用户
我按照这个StackOverflow的帖子扩展了我的用户模型:在Django中用自定义字段扩展用户模型
不过,我在创建用户注册表单时遇到了一个问题,出现了这个错误:
'Members'对象没有'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 个回答
2
你选择的方式来扩展你的 User
模型是创建一个 UserProfile
(你叫它 Member
)。但是,Member
其实并不是 User
的子类,所以你不能直接在 Member
上调用 User
的方法,比如 set_password
。
相反,你的 SignUpForm 的 Meta 模型应该还是 User
,如果想要获取扩展的用户资料,你需要调用 user.get_profile()
。比如,要获取用户的性别,你可以使用 user.get_profile().gender
。
想了解更多关于扩展用户资料的信息,可以查看 这篇文档。