ric*_*ich 3 django foreign-key-relationship
我在这里发表了这篇文章,并整理了如何将一个模型的ForeignKey设置为另一个应用程序中的模型.但是,当我第二次尝试时,我得到一个错误,不知道为什么.
我的中央应用程序包含"项目"和"注释"的模型,以及带有报告模型的报告应用程序."注释"在"报告"应用中的"报告"中有一个FK,这似乎可以正常使用此代码:
#models.py for Central app
from GIanno.pt_reports.models import Report
class annotation(models.Model):
...
report=models.ForeignKey(Report)
Run Code Online (Sandbox Code Playgroud)
但是,在Reports应用程序中,当我尝试使用与上面相同的格式为"报告"设置FK以将其链接到"中心"应用程序中的"项目"时,我收到错误"无法导入名称"项目'从进口线.
关于它为什么单向而不是另一种方式工作的任何想法.订单有点重要吗?谢谢
我的猜测是你创建了一个循环导入条件.当您从一个python模块导入某些内容时会发生这种情况,该模块又从尝试导入它的模块导入,从而阻止导入进行解析.
一般来说,处理循环导入有三种策略,其中两种在这种情况下有效:
移动您的类和导入,以便导入只朝一个方向.
使用延迟评估.在Django的情况下,可以通过使用点表示法传递指定应用程序名称和模型的字符串来为ForeignKey完成此操作:report=models.ForeignKey('central.Report')
将import语句移出全局模块作用域并进入模块中函数的作用域.这样,导入不会立即进行评估,并且模块可以作为一个整体成功导入,同时仍然允许模块中的导入在调用时发生.(注意:这不适用于ForeignKey关系)
懒惰的FK分辨率(#2)可能是你最好的选择.一般而言,尽管最佳策略是简化模型/模块布置,以尽可能避免循环导入.
| 归档时间: |
|
| 查看次数: |
4792 次 |
| 最近记录: |