Django:为什么在ForeignKey定义中围绕模型引用

neo*_*ser 9 django

我想知道这两个外键定义之间的区别是什么.

(1) MyFKField = models.ForeignKey('MyModel')
(2) MyFKField = models.ForeignKey(MyModel)
Run Code Online (Sandbox Code Playgroud)

我理解(我认为......)(1)MyModel需要在同一个文件中定义而另一个需要导入,但我不确定这样做的原因/好处.

我看了一下Django文档,但找不到任何东西,我也不确定这是否是正确的问题,如果不是,那么道歉.

干杯

Jef*_*eff 10

Django文档声明你将使用字符串(1):

  • 你想要一个递归的关系(例如 - model.ForeignKey('self'))
  • 用于引用可能尚未定义的模型(用于循环关系).
  • 在另一个应用程序中引用模型的快捷方式(例如 - model.ForeignKey('app.mymodel'))

但一般来说,直接指定模型类很明显,它来自(2).


Ign*_*ams 8

没有引号,它是对文件中定义或通过引入的模型的引用import.有了引号,Django负责在所有已安装的应用程序中的所有模型中查找模型.

  • 是.但是Django需要(非常)更长的时间来解决它,而不是让Python做到这一点. (2认同)
  • @IgnacioVazquez-Abrams 你是否知道情况是否仍然如此。如果是这样,为什么 django 文档使用引用的版本? (2认同)
  • @AKSH:我无法告诉你文档作者的想法。 (2认同)