如何在Django中表达一对多关系?

我现在正在定义Django模型,我意识到模型字段类型中没有OneToManyField。我肯定有办法做到这一点,所以我不确定我错过了什么。我基本上有这样的东西:

class Dude(models.Model):
numbers=models.OneToManyField('PhoneNumber')
类别电话号码(models.Model):
number=models.CharField()

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

类业务(models.Model):
numbers=models.OneToManyField('PhoneNumber')

在模型中,我将用什么来代替OneToManyField(它不存在)来表示这种关系?我来自Hibernate/JPA,在那里声明一对多关系非常简单:

@OneToMany
私人名单<电话号码>电话号码;

我如何用Django来表达这一点

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

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

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

在您的示例中,当前的结构允许每个花花公子都有一个号码,并且每个号码都属于多个花花公子(与业务相同)

如果您想要反向关系,您需要在电话号码模型中添加两个ForeignKey字段,一个是Dude字段,另一个是Business字段。这将允许每个数字属于一个花花公子或一个企业,并且使花花公子和企业能够拥有多个数字。我想这可能就是你想要的

类业务(models.Model):
    ...
类都德(models.Model):
    ...
类别电话号码(models.Model):
都德=模型。外键(都德)
业务=模型。外键(业务)

发表评论