Django迁移:关系已经存在

Mar*_*vec 1 django postgresql migrate makemigrations

我在使用django模型迁移方面遇到了麻烦.我的应用程序中有一些模型,我已经有了一些数据.当我在我的应用程序中添加一些模型并运行时makemigrations,应用程序报告没有任何变化.我知道迁移时有时会出现一些错误,所以我删除了数据库中的django_migrations表并makemigrations再次运行,现在程序找到了我的新字段.

现在的问题是,如果我运行migrate系统告诉我一些表已经存在.(这是正确的,因为他们这样做).我不想删除那些表,因为我已经有了数据.

我无法运行migrate --fake,因为程序会认为我已经拥有了所有表,这不是真的.

所以,我正在寻找一种告诉程序的方法:运行迁移,如果表存在则跳过它.(--fake它)

另一个问题是为什么会发生这种情况,makemigrations无法识别我的更改(一些缓存问题,......)?

小智 10

这样做怎么样?

python manage.py makemigrations

(如果您已准备好迁移文件,请跳过此步骤)

它将为该包创建迁移,例如使用0001_initial.py之类的名称

手动编辑文件,以便删除除已在数据库中创建的模型之外的所有模型.

现在你做一个虚假的迁移.这将使您的数据库与模型同步.

python manage.py migrate --fake

然后再次运行makemigrations以创建其余的表以及新的迁移文件.

python manage.py makemigrations

关于你的另一个问题,为什么makemigrations没有重新认识你的模型可能是因为以下原因:

  1. 这些更改的迁移已存在于某些迁移文件中.
  2. 你错过了提到INSTALLED_APPS中的package_name,但我相信你在这里做到了.