如何在Django中expression一对多的关系

我现在正在定义我的Django模型,并且我意识到模型字段types中没有OneToManyField 。 我确信有一种方法可以做到这一点,所以我不知道我错过了什么。 我基本上有这样的东西:

 class Dude(models.Model): numbers = models.OneToManyField('PhoneNumber') class PhoneNumber(models.Model): number = models.CharField() 

在这种情况下,每个Dude可以有多个PhoneNumber ,但是这种关系应该是单向的,因为我不需要从PhoneNumber中知道Dude拥有它,因为我可能拥有许多拥有PhoneNumber实例的不同对象例如Business ,例如:

 class Business(models.Model): numbers = models.OneToManyField('PhoneNumber') 

我将在模型中replaceOneToManyField (哪个不存在)来表示这种关系? 我来自Hibernate / JPA,声明一对多的关系如下所示:

 @OneToMany private List<PhoneNumber> phoneNumbers; 

我怎样才能expression这个在Django?

要在Django中处理一对多的关系,你需要使用ForeignKey

关于ForeignKey的文档非常全面,应该回答你所有的问题:

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

您示例中的当前结构允许每个Dude有一个数字,每个数字属于多个Dudes(与Business相同)。

如果您想要反向关系,则需要将两个ForeignKey字段添加到您的PhoneNumber模型中,一个Dude和一个Business。 这将允许每个数字属于一个老兄或一个企业,并且有Dudes和企业能拥有多个数字。 我想这可能是你以后的事情。

 class Business(models.Model):  ... class Dude(models.Model):  ... class PhoneNumber(models.Model):  dude = models.ForeignKey(Dude)  business = models.ForeignKey(Business) 

在Django中,一对多关系称为ForeignKey。 然而,它只能在一个方向上工作,所以不需要具有Dude类的number属性

 class Dude(models.Model): ... class PhoneNumber(models.Model): dude = models.ForeignKey(Dude) 

许多模型可以有一个ForeignKey到另一个模型,所以它是有效的有PhoneNumber这样的第二个属性

 class Business(models.Model): ... class Dude(models.Model): ... class PhoneNumber(models.Model): dude = models.ForeignKey(Dude) business = models.ForeignKey(Business) 

您可以使用d.phonenumber_set.objects.all()访问Dude对象dPhoneNumber ,然后对Business对象执行类似的操作。

你可以在OneToMany关系的许多方面(即ManyToOne关系)使用外键,或者使用具有唯一约束的ManyToMany (在任何一方)。