【问题标题】:Difference between django's OneToOneField and django's OneToOneReldjango 的 OneToOneField 和 django 的 OneToOneRel 的区别
【发布时间】:2015-03-26 15:24:24
【问题描述】:

django 的 OneToOneField 和 django 的 OneToOneRel 的主要区别是什么。

当我搜索时,我发现了:

What's the difference between django OneToOneField and ForeignKey?

【问题讨论】:

    标签: django


    【解决方案1】:

    OneToOneRel 是一个内部类,它实现了一对一关系的反向引用。它没有记录在任何地方,不是任何公共 API 的一部分,也不能在您的应用中使用。

    【讨论】:

      【解决方案2】:

      首先我想,没有“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 不是关系字段。

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 2020-08-13
        • 2018-06-05
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        相关资源
        最近更新 更多