我创建了一个模型并执行了syncdb,它创建了我的模型设计的表格
之后我修改了模型并执行了makemigrations
,它创建了迁移,忽略了syncdb已经创建的表。
所以我最终得到一个错误“关系已经存在”。
为什么makemigrations从头开始创建所有内容? 我该如何解决这种情况?
答案 0 :(得分:10)
makemigrations
根据检测到的模型更改创建新的迁移。
此外,需要注意的一点是,自Django 1.7以来,syncdb
命令已被弃用,并将在Django 1.9中删除。因此,您应该使用migrate
命令。
自1.7版以来已弃用:
此命令已被弃用 支持migrate
命令,它执行旧的行为 以及执行迁移。
答案 1 :(得分:2)
makemigration
始终会创建一个包含所有更改的迁移文件。因此,当您第一次运行makemigration
时,它会尝试查找上一个迁移文件。如果没有找到,它会创建一个初始迁移文件。当它试图将它应用于数据库时,它发现关系已经存在。因而抛出错误。
最佳实践是,在更新模型之前,创建一个迁移,然后修改模型。