我正在开发一个 django 项目,很多时候我会迭代一个新模型,一路创建新的迁移文件。迁移文件名不同,但会更改同一模型的部分。这些迁移文件也与其他开发人员共享。为了与在同一分支上工作并应用迁移的其他开发人员同步更改,执行操作的正确顺序是什么?我知道重新初始化数据库是一种解决方案,但可以说不是一个非常干净的解决方案。
我在删除接收端的最后一个迁移后尝试了这个序列,但它没有按预期工作
python manage.py migrate app_name XX #returns to the previous migration
python manage.py makemigrations
python manage.py migrate # this creates issue because the relations-columns already exist
接下来要做的合乎逻辑的事情是
python manage.py migrate --fake
但是,这并不能解决问题,因为更新的更改未得到反映。
最后我也尝试过
python manage.py makemigrations --merge
但这并没有找到要合并的东西。
我收到的错误是:
Relation "foo" already exists
表示该表已存在于数据库模式中。
看起来您有两个迁移实际上正在创建
foo
无论是什么。有几种方法可以解决这个问题。您可以手动检查迁移文件并找到有问题的迁移,将其删除以及所有将来的迁移(假设没有创建任何手动迁移文件)并再次运行 python manage.py makemigrations
。
如果您不习惯这样做,那么您可以尝试以下步骤:
登录到您尝试部署到的环境所附加的数据库(我们称之为产品)。
执行以下查询:
select * from django_migrations order by id desc;
这应该按降序显示实际应用于数据库的迁移。记下应用程序和名称。
python manage.py makemigrations
。这应该会创建一组新的迁移,而不会出现您所看到的冲突。
警告:执行此操作之前,请确保您没有任何自定义迁移文件。 如果您仅使用
python manage.py makemigrations
创建迁移文件,这不会成为问题。