Django 1.8中的Syncdb与migrate对比

7
我创建了一个模型并执行了syncdb,它按照我的模型设计创建了表格。
之后我修改了模型并执行了makemigrations,它创建了迁移但忽略了由syncdb已经创建的表格。
所以我最终遇到了“关系已经存在”的错误。
为什么makemigrations会从头开始创建?我该如何解决这个问题?

尝试运行 python manage.py migrate --fake <appname> - Rahul Gupta
由于某些原因,它没有应用新的更改。 我在某个地方读到迁移在django_migrations数据库中被标记为完成。 无论如何,我解决了这个问题,我刚刚发现他们将从django 1.9中删除syncdb。 - Aymane Shuichi
是的,它从Django 1.7开始被弃用,并将在Django 1.9中被移除。 - Rahul Gupta
2个回答

13

makemigrations 根据检测到的模型更改创建新的迁移。

另外需要注意的一点是,syncdb 命令自Django 1.7版本起已弃用,并将在Django 1.9中删除。因此,您应该使用 migrate 命令。

syncdb 文档中可以看到:

自版本1.7起已弃用:
该命令已被migrate 命令取代,后者执行旧行为以及执行迁移。


2

makemigrations 始终只创建一个包含所有更改的迁移文件。因此,当您第一次运行 makemigrations 时,它会尝试查找以前的迁移文件。如果没有找到,它将创建一个初始的迁移文件。但是,在应用此迁移文件到数据库时,如果关系已经存在,则会出现错误。

最佳实践是,在更新模型之前,先创建一个迁移文件,然后再修改模型。


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