gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:32:21 26 4
gpt4 key购买 nike

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

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

class PhoneNumber(models.Model):
number = models.CharField()

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

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

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

@OneToMany
private List<PhoneNumber> phoneNumbers;

我如何在 Django 中表达它?

最佳答案

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

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

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

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

如果您想要反向关系,则需要向您的 PhoneNumber 模型添加两个 ForeignKey 字段,一个用于 Dude,一个用于 Business。这将允许每个号码属于一个 Dude 或一个 Business,并且让 Dudes 和 Business 能够拥有多个号码。我认为这可能就是您所追求的。

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

关于django - 如何在 Django 中表达一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com