我对内置于user / auth的django感到满意,我只想添加一些字段并更改表名(主要是最后一个,我可以使用另一个表来自定义字段)
所以我四处搜索,显然我们可以按照Rename Django's auth_user table?
的建议使用子类所以我必须开始一个新的应用程序并使用它的模型作为AbstractUser
的子类,还是有另一种方法? (毕竟我只想使用它的模型和app的其他部分都没用)
无论如何我创建了一个名为customuser
的新项目/启动应用程序,在其模型中我有这个代码
customuser / models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class customuser(AbstractUser):
class Meta:
swappable = 'AUTH_USER_MODEL'
db_table = 'customuser'
我运行makemigrations并迁移......它已成功完成
但是在数据库中创建了具有默认名称的表格,如下所示......我错过了什么?
答案 0 :(得分:2)
要使用自定义用户模型,您需要在设置模块中设置AUTH_USER_MODEL
设置。
请注意,您不需要设置swappable = 'AUTH_USER_MODEL'
。这是一个未记录的私有属性,可能最好保持不变。
答案 1 :(得分:1)
坦率地说,如果你仍然能够做到这一点,我会开始一个新的应用程序。它在docs中说,在开始你的项目之前最好做出这个决定,因为它很难......很难。
如果您打算设置AUTH_USER_MODEL,则应在创建任何迁移或首次运行manage.py migrate之前设置它。
否则解决方案是从数据库dumpdata
,并手动调整它,以便转储文件中对用户类的任何引用都替换为您的新用户类。然后,您需要创建一些迁移来更改架构。
所以它是可行的。从新项目开始,它只是很多更简单。
答案 2 :(得分:0)
Django通过为引用自定义模型的AUTH_USER_MODEL设置提供值来覆盖Django的默认用户模型
AUTH_USER_MODEL = 'myapp.MyUser'
此虚线对描述Django应用程序的名称(必须在您的INSTALLED_APPS中),以及您希望用作用户模型的Django模型的名称。
可以在Django Project website上找到与管理员兼容的自定义用户应用的完整示例。