我应该编辑Django迁移文件来编辑不匹配的依赖项吗

4si2a6ki  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(96)

我陷入了一个非常独特的问题。我创建了模型1.'message',使用了一段时间,然后我将其更改为2.'messages',之后再次更改为3.'message',但这次在模型字段中有很多更改。
正如我后来了解到的,Django迁移在重命名模型时会遇到一些问题。在我的迁徙过程中,出现了一些问题。虽然我已经以正确的方式运行了所有迁移,但在运行消息的第三次迁移时,我遇到了一些手动修复的问题。现在,当我在其他模型中运行迁移时,我发现这个迁移仍然依赖于消息的第二次迁移。然而,它依赖于第二次迁移的字段实际上是在第三次迁移中创建的。
我得到的追踪:

ValueError: Lookup failed for model referenced by field activities.Enquiry.message_fk: chat.Message

字符串
以及:

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.


我想问的是,我是否应该手动编辑迁移文件中的依赖关系,以便在消息中将其从迁移2更改为迁移3。
PS:使用django 1.7.2

igetnqfo

igetnqfo1#

通常,您不应该手动编辑它们。
一旦你开始编辑它们,你将陷入循环依赖问题,如果你不记得你做了什么更改,你的整个迁移将被打乱。
如果您没有任何数据要丢失,您可以做的是恢复迁移。如果要删除迁移,则应采取额外的预防措施,以确保迁移表中不再有指向不存在迁移的条目。(我建议不要手动删除迁移,因为它可能会变得复杂。
如果您分析了迁移文件,并清楚地知道在什么位置发生了问题,那么您应该只考虑编辑迁移文件,但在您能够处理它之前不要这样做。
在您的情况下,是的,问题可能是由于重命名而产生的,正如您所说,在运行迁移时,您遇到了手动修复的一些问题,可能发生的情况是,该过程将被卡住,并产生了一些问题。您可以更改依赖项并运行makemigrations。如果存在循环依赖关系,它将直接出现,那么您应该恢复更改。或者,只需做更多的分析,通过编辑更多的文件来消除循环依赖性问题。(保持备份)如果您幸运或者您对迁移有深入了解,您可能最终会获得成功。

9rbhqvlz

9rbhqvlz2#

不,我不这么认为,您最好在上次成功迁移后删除迁移文件并重新运行。

cmssoen2

cmssoen23#

在经历过不同公司的迁移管理过程之后,我认为如果您知道自己在做什么,那么编辑迁移是很好的。实际上,在许多情况下,您将不得不编辑现有的迁移文件,甚至创建新文件,以实现特定的更改。这里需要注意的几点:
1.理解并保持正在进行的操作顺序。
1.注意依赖关系
1.在推进到暂存和生产之前测试它

相关问题