gpt4 book ai didi

Django从另一个应用程序模型中的外键导入错误

转载 作者:行者123 更新时间:2023-12-01 08:39:30 28 4
gpt4 key购买 nike

我关注了这篇文章here并整理了如何将一个模型的ForeignKey设置为另一个应用程序中的模型。但是,当我第二次尝试时,我得到一个错误,不知道为什么。

我有一个带有“项目”和“注释”模型的 Central 应用程序,以及一个带有报告模型的 Reports 应用程序。 “注释”在“报告”应用程序中具有“报告”的 FK,这似乎适用于以下代码:

#models.py for Central app
from GIanno.pt_reports.models import Report

class annotation(models.Model):
...
report=models.ForeignKey(Report)

但是,在“报告”应用程序中,当我尝试为“报告”设置 FK 以使用与上述相同的格式将其链接到“中央”应用程序中的“项目”时,我收到错误“无法导入名称”项目' 来自导入行。

关于为什么它以一种方式而不是另一种方式工作的任何想法。订单是否重要?谢谢

最佳答案

我的猜测是您创建了一个循环导入条件。当您从一个 python 模块导入某些东西时,会发生这种情况,该模块又从尝试导入它的模块导入,从而阻止导入解析。

一般来说,处理循环导入有三种策略,其中两种在这种情况下会起作用:

  • 移动你的类和导入,以便导入只向一个方向。
  • 使用惰性求值。在 Django 的情况下,这可以通过使用点符号传递指定应用程序名称和模型的字符串来为 ForeignKey 完成:report=models.ForeignKey('central.Report')
  • 将 import 语句移出全局模块范围并进入模块内函数的范围。这样,不会立即评估导入,并且可以将模块作为一个整体成功导入,同时仍然允许在调用模块时进行模块内的导入。 (注意:这不适用于 ForeignKey 关系)

  • 懒惰的 FK 分辨率(#2)可能是你最好的选择。一般来说,尽管最好的策略是简化模型/模块的排列,尽可能避免循环导入。

    关于Django从另一个应用程序模型中的外键导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680414/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com