我们对Django来说还很陌生。我们有一个应用程序和一个模型。我们想在模型中添加一个“类别”对象。我们这样做了,然后运行了“ python manage.py makemigrations”。
然后,我们将代码部署到运行旧代码的服务器上,并运行“ python manage.py migration”。这将引发2页异常,并以'django.db.utils.ProgrammingError:(1146,“表'reporting.contact_category'不存在”)结尾”
这似乎是在查看我们的models.py。如果我们从模型及其所有引用中注释掉Category,则迁移成功。
我认为迁移的重点是使数据库与模型期望的匹配,但这似乎要求模型在迁移之前与数据库匹配。
我们显然在做错事,但是怎么办?
答案 0 :(得分:1)
我相信您跳过了服务器中的某些迁移,因此现在您缺少一些表(我一直处于这种情况。请确保 migrations 目录位于您的 .gitignore 上。您无法检入迁移文件,必须在服务器上运行makemigrations
。这可以通过追溯到数据库和模型文件匹配的点来解决,但是如果这是您的生产数据库,则这是一个冒险的过程,因此您应先进行完整备份,然后再在另一台计算机上尝试该过程。
这是我的建议:
python manage.py makemigrations
和python manage.py migrate --fake-initial
(这将更新迁移文件,而无需实际尝试修改数据库)。python manage.py makemigrations
和python manage.py migrate
。如果在注释引发异常的模型之后,又得到了另一个异常,则必须继续注释并再次尝试。迁移成功后,您可以取消注释所有注释的模型并进行实际迁移。
答案 1 :(得分:0)
如果您对python manage.py makemigrations
进行了更改,请记住运行models.py
,然后运行python manage.py makemigrations
两个命令必须必须在具有相同数据库的同一服务器上运行