Django:CustomUser模型没有内置User的属性

时间:2013-12-17 11:22:34

标签: django forms customization

我的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的属性并将这些字段显示在我的表单中?

提前致谢!

1 个答案:

答案 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的示例,他们比我更好地解释。