Django:需要用户电子邮件

问题描述 投票:6回答:2

对于我的应用程序,应该要求用户的电子邮件字段。对于默认的用户模型,情况并非如此。所以我认为创建docs中描述的自定义用户模型是有意义的:

如果您正在开始一个新项目,强烈建议您设置自定义用户模型,即使默认的用户模型足够您。此模型的行为与默认用户模型相同,但如果需要,您将来可以自定义它:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    email = models.EmailField(_('email address'), blank=False)

但是,我不确定这是否是实现这一目标的正确方法。

原因是Django文档的here说:

当您想要将一些公共信息放入许多其他模型时,抽象基类非常有用。编写基类并在Meta类中放置abstract = True。然后,此模型不会用于创建任何数据库表。相反,当它用作其他模型的基类时,其字段将添加到子类的字段中。在抽象基类中具有与子项中的字段相同的字段是错误的(并且Django将引发异常)。

我现在应该怎么做?

python django
2个回答
4
投票

我必须回答我的问题,因为现在我知道了解决方案:

我在开始帖子中描述的方式应该有效。文件是错的:https://code.djangoproject.com/ticket/29192


-1
投票

编辑:您必须继承AbstractBaseUser并实现所有其他属性。

from django.contrib.auth.models import AbstractBaseUser, UserManager

class User(AbstractBaseUser):
    email = models.EmailField(_('email address'), blank=False)       
    objects = UserManager()

第二次编辑:

应答回答是正确的。当前的文档只是wrong:“在抽象基类中使用与子项中的字段相同的字段是错误的(而Django会引发异常)。”

© www.soinside.com 2019 - 2024. All rights reserved.