django的OneToOneField与django的OneToOneRel之间的主要区别是什么。
当我搜索时,我遇到了:
What's the difference between django OneToOneField and ForeignKey?
答案 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不是关系字段。