spr*_*ksh 6 python django django-migrations
我遇到了一个非常独特的问题。我创建的模型1. “消息”,用了一段时间,然后我把它改为2 “消息”,之后又变回3. “消息”,但是这一次,在模型领域中的许多变化。
后来我知道,Django迁移在重命名模型时会遇到一些问题。在我的迁移中,出现了一些问题。尽管我以正确的方式运行了所有迁移,但在运行第三次迁移以获得消息时,却遇到了一些手动修复的问题。现在,当我为其他模型中的更改进行迁移时,我发现此迁移仍取决于消息的第二次迁移。但是,它依赖于第二次迁移的字段实际上是在第三次迁移中创建的。
我得到的追溯:
ValueError: Lookup failed for model referenced by field activities.Enquiry.message_fk: chat.Message
Run Code Online (Sandbox Code Playgroud)
和:
Applying contacts.0002_mailsend...Traceback (most recent call last):
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/config.py", line 163, in get_model
return self.models[model_name.lower()]
KeyError: 'message'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/migrations/state.py", line 84, in render
model = self.apps.get_model(lookup_model[0], lookup_model[1])
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/registry.py", line 202, in get_model
return self.get_app_config(app_label).get_model(model_name.lower())
File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/config.py", line 166, in get_model
"App '%s' doesn't have a '%s' model." % (self.label, model_name))
LookupError: App 'chat' doesn't have a 'message' model.
Run Code Online (Sandbox Code Playgroud)
我想问的是我是否应该手动编辑迁移文件中的依赖关系,以将其从消息中的迁移2更改为迁移3。
PS:使用Django 1.7.2
通常,您不应手动编辑它们。
一旦你开始编辑它们,你就会遇到循环依赖问题,如果你不记得你做了什么更改,你的整个迁移将会变得混乱。
如果您没有任何数据丢失,您可以做的是恢复迁移。如果要删除迁移,则应采取额外的预防措施,以确保迁移表中不存在指向不存在迁移的条目。(我建议不要手动删除迁移,因为它可能会变得复杂。)
如果您已经分析了迁移文件并且清楚地知道问题发生在什么位置,那么只有您应该考虑编辑迁移文件,但在您可以处理它之前不要这样做。
在您的情况下,是的,问题可能是由于重命名而产生的,正如您所说,在运行迁移时您遇到了手动修复的一些问题,可能会发生该过程被卡在中间并产生了一些问题。您可以更改依赖项并运行makemigrations。如果存在循环依赖,它会直接出现,那么你应该恢复更改。或者,只需进行更多分析并通过编辑更多文件来消除循环依赖问题。(保留备份)如果你幸运或者你对迁移有深入的了解,你可能最终会成功。