关系对象属性的onetoone或foreignkey

时间:2014-12-25 23:54:16

标签: django django-models

假设有一个对象 Foo ,它有 Bar 属性。

属性对于 Foo 对象是唯一的(每个对象都有自己的属性)。

定义这种关系的最有效方法是什么?在Foo的模型中使用Bar的模型定义外键?或定义从Bar到Foo(或签证经文)的一对一关系?

django手册说:

  

一对一的关系。从概念上讲,这与a类似   ForeignKey与unique = True,但关系的“反向”侧   将直接返回单个对象。

这是令人困惑的陈述。哪种关系选择哪个工作?那么效率(查询数量)呢?

谢谢。

1 个答案:

答案 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版本看起来更好: - )