我现在正在定义Django模型,我意识到OneToManyField模型字段类型中没有。我确定有办法做到这一点,所以我不确定我缺少什么。我基本上有这样的事情:
OneToManyField
class Dude(models.Model): numbers = models.OneToManyField('PhoneNumber') class PhoneNumber(models.Model): number = models.CharField()
在这种情况下,每个Dude可以有多个PhoneNumberS,但这种关系应该是单向的,因为我不需要从知道PhoneNumber其Dude拥有它本身,因为我可能有许多不同的对象自身的PhoneNumber情况下,如Business为例:
Dude
PhoneNumberS
PhoneNumber
Business
class Business(models.Model): numbers = models.OneToManyField('PhoneNumber')
我将OneToManyField用模型中的什么替换(不存在)以表示这种关系?我来自Hibernate / JPA,在这里声明一对多关系非常简单:
@OneToMany private List<PhoneNumber> phoneNumbers;
如何在Django中表达?
要在Django中处理一对多关系,你需要使用ForeignKey。
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)