假设有一个对象 Foo ,它有 Bar 属性。
属性条对于 Foo 对象是唯一的(每个对象都有自己的属性)。
定义这种关系的最有效方法是什么?在Foo的模型中使用Bar的模型定义外键?或定义从Bar到Foo(或签证经文)的一对一关系?
django手册说:一对一的关系。从概念上讲,这与a类似 ForeignKey与unique = True,但关系的“反向”侧 将直接返回单个对象。
这是令人困惑的陈述。哪种关系选择哪个工作?那么效率(查询数量)呢?
谢谢。答案 0 :(得分:1)
如果每个Bar
只有一个Foo
个对象,则使用OneToOne关系。如果单个Bar
可以有多个Foo
,请使用ForeignKey。
至于“反向”声明:
# access to Bar property of Foo in OneToOne relation
foo.bar
# access to first Bar property of Foo in ForeignKeyRelation
foo.bar_set.all().first()
在这两种情况下,它都是一个SQL查询,但OneToOne版本看起来更好: - )