django的OneToOneField和django的OneToOneRel之间的主要区别是什么.
当我搜索时,我遇到了:
首先我想,没有“OneToOneRel”。但是还有。它不在文档中。但它存在于 Django 源代码中。所以有第一个区别。;)
我决定在 Django 源代码中查找 OneToOneField。这是OneToOneField的文档字符串:
OneToOneField 本质上与 ForeignKey 相同,除了它总是带有“唯一”约束并且反向关系总是返回指向的对象(因为永远只有一个),而不是返回一个列表。
但我们已经知道了。很酷的是,你会看到几行:
rel_class = OneToOneRel
Run Code Online (Sandbox Code Playgroud)
所以第二个区别是OneToOneField中使用了OneToOneRel。
比我在这个 Python 文件中搜索 OneToOneRel 并发现:
class OneToOneRel(ManyToOneRel):
...
Run Code Online (Sandbox Code Playgroud)
所以第三个区别是 OneToOneRel 是 ManyToOneRel 的子类,而 OneToOneField 是 ForeignKey 的子类。
对我来说,知道这一点就足够了:OneToOneRel 用于 OneToOneField。OneToOneRel 就像 ManyToOneRel 对应于 ForeignKey,ManyToManyRel 对应于 ManyToManyField。那些 rel 类似乎处理约束。
重要的部分:您不能像比较 OneToOneField 和 ForeignKey 那样比较 OneToOneField 和 OneToOneRel,因为 OneToOneRel 不是关系字段。
| 归档时间: |
|
| 查看次数: |
2863 次 |
| 最近记录: |