3 回答
TA贡献1802条经验 获得超5个赞
当您运行第一个migrate
命令时,所有默认迁移将生效,这意味着将创建所有表和关系。
当您自定义默认模型User
(覆盖默认User
模型并为其提供值AUTH_USER_MODEL
)时,所有关系都会发生变化。
创建数据库表后更改 AUTH_USER_MODEL 会变得更加困难,因为它会影响外键和多对多关系
不建议中途更改用户模型,因为您需要手动修复数据库架构。
如果您中途更改了用户模型,解决此问题的最简单方法是:删除所有迁移、数据库并运行 makemigrations 和 migrate 命令。这创建了一个新的数据库模式。
这是文档中所说的限制:
由于Django对可交换模型的动态依赖特性的限制,AUTH_USER_MODEL引用的模型必须在其应用程序的第一次迁移中创建(通常称为0001_initial);否则,您将遇到依赖性问题。
来自文档:
自定义用户模型
在项目中更改为自定义用户模型
最佳实践是在项目开始时创建自定义用户模型,然后稍后迁移并处理用户模型,以防稍后更改与身份验证或用户模型相关的任何内容
TA贡献1866条经验 获得超5个赞
此错误通常意味着您的迁移出了问题,并且当您在事后尝试进行此类更改时经常会发生此错误。一种可能的解决方案是删除除以initial.py
. 一次makemigrations
又一次migrate
,它应该有效。
TA贡献1963条经验 获得超6个赞
如果我没理解错的话,你的项目已经在运行了,那就是 makemigration 不是第一次 makemigration。如果是这样,请尝试删除数据库并再次运行 makemigration(也许在测试开发环境中),只是为了检查问题。如果这个工作(并且应该)你已经发现了问题。如果您不想删除数据库,也许您可以扩展用户而不是覆盖。
添加回答
举报