如何在Django中表达一对多关系
我现在正在定义Django模型,我意识到OneToManyField
模型字段类型中没有。我确定有办法做到这一点,所以我不确定我缺少什么。我基本上有这样的事情:
class Dude(models.Model): numbers = models.OneToManyField('PhoneNumber')
class PhoneNumber(models.Model):
number = models.CharField()
在这种情况下,每个Dude
可以有多个PhoneNumberS
,但这种关系应该是单向的,因为我不需要从知道PhoneNumber
其Dude
拥有它本身,因为我可能有许多不同的对象自身的PhoneNumber
情况下,如Business
为例:
class Business(models.Model): numbers = models.OneToManyField('PhoneNumber')
我将OneToManyField
用模型中的什么替换(不存在)以表示这种关系?我来自Hibernate / JPA,在这里声明一对多关系非常简单:
@OneToManyprivate List<PhoneNumber> phoneNumbers;
如何在Django中表达?
回答:
要在Django中处理一对多关系,你需要使用ForeignKey
。
关于ForeignKey的文档非常全面,应该回答你遇到的所有问题:
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
你示例中的当前结构允许每个Dude拥有一个号码,并且每个号码都属于多个Dudes(与Business相同)。
如果需要反向关系,则需要在PhoneNumber模型中添加两个ForeignKey字段,其中一个添加到Dude,另一个添加到Business。这样一来,每个号码都可以属于一个Dude或一个公司,并且Dudes和Businesses可以拥有多个号码。我认为这可能是你追求的目标。
class Business(models.Model): ...
class Dude(models.Model):
...
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
business = models.ForeignKey(Business)
以上是 如何在Django中表达一对多关系 的全部内容, 来源链接: utcz.com/qa/398956.html