django的OneToOneField和django的OneToOneRel之间的区别

时间:2015-01-27 21:19:52

标签: django

django的OneToOneField与django的OneToOneRel之间的主要区别是什么。

当我搜索时,我遇到了:

What's the difference between django OneToOneField and ForeignKey?

2 个答案:

答案 0 :(得分:6)

OneToOneRel是一个内部类,它实现了一对一关系的后向引用。它没有在任何地方记录,也不是任何公共API的一部分,并且不适用于您的应用程序。

答案 1 :(得分:3)

首先我想,没有' OneToOneRel'。但是还有。它不在文档中。但它存在于Django源代码中。所以有第一个区别。 ;)

我决定在Django源代码中查找OneToOneField。这是docstring for the OneToOneField

  

OneToOneField与ForeignKey基本相同   总是带有"唯一"与它的约束和   反向关系总是返回指向的对象(因为那里   只会是一个),而不是返回一个清单。

但我们已经知道了。很酷的是,你看到few lines down

rel_class = OneToOneRel

所以第二个区别是OneToOneRel用于OneToOneField。

我在这个Python文件中搜索了OneToOneRel并找到了:

class OneToOneRel(ManyToOneRel):
    ...

所以第三个区别是OneToOneRel是ManyToOneRel的子类,但是OneToOneField是ForeignKey的子类。

对我来说,这足以让人知道:OneToOneRel用于OneToOneField。 OneToOneRel是ManyToOneRel用于ForeignKey的函数,ManyToManyRel用于ManyToManyField。那些rel类似乎处理了约束。

重要的部分:您不能将OneToOneField与OneToOneRel进行比较,就像将OneToOneField与ForeignKey进行比较一样,因为OneToOneRel不是关系字段。