我的CustomUser模型有问题。这是模型:
class CustomUser(models.Model):
department = models.ManyToManyField(Department)
game = models.ManyToManyField(Game)
user = models.OneToOneField(User)
在我的用户注册表单中,我想要包含User以及Game和Department字段的字段。这是我现在的表格:
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(max_length = '200')
last_name = forms.CharField(max_length = '200')
class Meta:
model = User
fields = ('first_name', 'last_name', 'username', 'email')
我使用User作为我的模型,所以显然它现在没有Game和Department字段。同时,如果我在表单中使用CustomUser作为模型,我确实拥有了我需要的所有字段,但是当我单击注册按钮时,出现错误:“CustomUser没有set_password属性”。
另外,在设置中我有这个:
CUSTOM_USER_MODEL = 'logins.CustomUser'
那么如何让CustomUser Model具有User的属性并将这些字段显示在我的表单中?
提前致谢!
答案 0 :(得分:1)
创建自己的自定义用户模型时,通常最好将包含这些默认字段的AbstractBaseUser子类化,并且通常会使您更轻松地处理该过程。与默认用户模型的OneToOne关系更多地是关于内置用户模型的过期,这听起来不像您正在寻找的内容。详细了解here
正如丹尼尔在评论中提到的,这意味着你将不得不明确地包含用户名字段(你显然可以自由地定义它,你必须是唯一的)。在下面的示例中,我将电子邮件设置为用户名
from django.contrib.auth.models import AbstractBaseUser
class CustomUser(AbstractBaseUser):
department = models.ManyToManyField(Department)
game = models.ManyToManyField(Game)
# user = models.OneToOneField(User)
email = models.EmailField(max_length=255, unique=True, db_index=True)
USERNAME_FIELD = 'email'
现在您需要在表单中包含密码字段,请查看给出in the documentation的示例,他们比我更好地解释。