ForeignKey(User, unique=True) 和 OneToOneField 之间的区别[重复]

2024-02-14

之间有什么不同models.ForeignKey(Modelname, unique=True) and models.OneToOneField在姜戈?

我应该在哪里使用models.OneToOneField and models.ForeignKey(Modelname, unique=True)?


A OneToOneField非常类似于ForeignKey with unique=True。除非你正在进行多表继承,在这种情况下你必须使用OneToOneField,唯一真正的区别是用于访问相关对象的 api。

In the Django 文档 https://docs.djangoproject.com/en/dev/ref/models/fields/#onetoonefield它说:

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

让我们用一个例子来说明这意味着什么。考虑两个模型,Person and Address。我们假设每个人都有一个唯一的地址。

class Person(models.Model):
    name = models.CharField(max_length=50)
    address = models.ForeignKey('Address', unique=True)

class Address(models.Model):
    street = models.CharField(max_length=50)

如果你从一个人开始,你可以轻松访问该地址:

address = person.address

但是,如果您从地址开始,则必须通过person_set经理来找人。

person = address.person_set.get() # may raise Person.DoesNotExist

现在让我们替换ForeignKey with a OneToOneField.

class Person(models.Model):
    name = models.CharField(max_length=50)
    address = models.OneToOneField('Address')

class Address(models.Model):
    street = models.CharField(max_length=50)

如果你从一个人开始,你可以用同样的方式访问该地址:

address = person.address

现在,我们可以更轻松地通过该地址访问此人。

person = address.person # may raise Person.DoesNotExist
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ForeignKey(User, unique=True) 和 OneToOneField 之间的区别[重复] 的相关文章

随机推荐