我已经编写了我的第一个应用程序 Django 2.0
。
当我意识到将 id
主键字段从默认 integer
类型替换为 UUID
时,一切工作正常,应用程序几乎准备就绪让数据库录入更加安全。
当我搜索如何将用户表的 id
更改为 UUID
时,我得到了许多扩展 AbstractBaseUser
的教程。
这是我编写的自己的User
模型。
account/models.py
class User(AbstractBaseUser):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
但是我对不同来源的示例更加困惑。
每个示例都在扩展模型中添加更多字段,例如
first_name
last_name
is_staff
is_admin
active
其功能为
def get_fullname(self):
def get_shortname(self):
etc.
我认为所有这些字段和函数默认都存在于 AUTH_USER_MODEL
中。
扩展AbstractBaseUser
是否会覆盖AUTH_USER_MODEL
并且需要添加默认情况下存在的所有字段?
此外,我在不同模型中使用 settings.AUTH_USER_MODEL
作为外键。 是否应该替换为account.User
模型?
我还使用 django-allauth
插件来启用使用社交网络的登录,并仅使用电子邮件进行身份验证。 我是否需要使用 unique=True
在扩展模型中添加 email
字段?
最佳答案
Django AbstractBaseUser
仅提供以下字段:password、last_login、is_active。因此,如果您使用继承自 AbstractBaseUser
的自定义用户模型您需要定义所有其他字段,例如 email
手动。
作为问题的另一部分,只需添加 AUTH_USER_MODEL = 'users.User'
添加到您的 settings.py 文件应该使一切正常,而无需替换项目中的代码。
UPD
如果您需要像 first_name
这样的字段, last_name
等包含在您可以使用的模型中 AbstractUser
而不是AbstractBaseUser
.
关于django - 扩展 Django 中的默认用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064977/