Django自定义认证用户模型和重置迁移

4

我尝试在我的设置中设置自定义的AUTH_USER_MODEL,但由于一些以前的迁移而抛出CircularDependencyError错误。(我之前使用的是常规用户模型)

我该怎么解决?我不关心数据库,只需要一个单独的测试对象。但我能重置/移除迁移吗,还是需要开始一个全新的项目?

3个回答

3
Django在文档中警告不要更改AUTH_USER_MODEL(参见文档)

更改AUTH_USER_MODEL会对数据库结构产生重大影响。它会改变可用的表,并影响外键和多对多关系的构建。如果你打算设置AUTH_USER_MODEL,你应该在创建任何迁移或第一次运行manage.py migrate之前设置它。

在创建了表后更改此设置不受makemigrations支持,将导致您必须手动修复模式,从旧用户表中传输数据,并可能手动重新应用一些迁移。

如果您不关心数据库,则可以尝试删除数据库,删除现有的迁移文件,然后再次运行makemigrations


谢谢!我可以直接删除文件夹吗,还是需要做其他的事情?(我记得以前删除这样的迁移时遇到了一些麻烦) - user3199840
2
我会删除migrations文件夹中除了__init__.py之外的所有文件。如果您删除整个迁移文件夹,我相信您将不得不运行./manage.py makemigrations <appname>为该应用程序创建初始迁移。 - Alasdair

0
如我在这里所述,只需在文件浏览器中删除迁移文件夹db.sqlite3文件(或者您选择的任何数据库语言,然后在项目目录中会有一个数据库文件)。

只有在确定可以完全放弃整个数据库并且需要重新开始所有迁移和数据输入时才执行此操作。


0

您可以通过简单地删除迁移文件和数据库中的条目来轻松删除迁移。然后,您可以再次进行迁移以创建您的“第一个”迁移。


谢谢。你确定吗?我怎么移除它?只是在每个应用程序级别删除或清空文件夹吗?我记得以前移除迁移时遇到过一些问题。我正在使用1.8版本。 - user3199840
1
只需删除迁移文件夹中的文件(除了 init.py),然后删除数据库中迁移表中的条目。如果这是一个测试项目,这样做是非常安全的。你所做的就是删除 Django 对你的迁移历史的记录。模型没有改变,当你下次运行 makemigrations 时会创建一个新的历史记录。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接