升级到django 1.8后,我在迁移过程中收到错误消息:
ProgrammingError: relation "django_content_type" already exists
Run Code Online (Sandbox Code Playgroud)
我对这个错误背后的背景感兴趣,但更重要的是,我该如何解决它?
Dan*_*yle 120
使用--fake-initial有时会对项目的初始迁移造成麻烦
python manage.py migrate --fake-initial
Run Code Online (Sandbox Code Playgroud)
它是1.8的新功能.在1.7中, - fake-initial是一个隐式默认值,但在1.8中是显式的.
来自Docs:
如果所有具有该迁移中所有CreateModel操作创建的模型名称的数据库表已经存在,则可以使用--fake-initial选项允许Django跳过应用程序的初始迁移.此选项适用于首次针对预先存在使用迁移的数据库运行迁移时使用.但是,此选项不会检查匹配的表名称之外的匹配数据库模式,因此只有在您确信现有模式与初始迁移中记录的模式匹配时才可以安全使用.
https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---fake-initial
我在 Ubuntu 18.04 + Postgres 10.10 版本上托管的 Django 2.2.7 或 Django 3.0 上解决了这个问题。
- 在 Postgres 数据库中恢复数据库(为此使用了 pgAdmin 工具)
- (virtualenv)python manage.py loaddata dumpfile.json
- 从数据库中删除 django_migrations 表(为此使用 pgAdmin 工具)
- (virtualenv)python manage.py makemigrations
- (virtualenv)python manage.py migrate --fake
- (virtualenv)python manage.py migrate
- (virtualenv)python manage.py collectstatic
- (virtualenv)python manage.py runserver 0.0.0.0:8000
归档时间: |
|
查看次数: |
26516 次 |
最近记录: |