如何访问 django 多对多关系的连接表/对象

Posted

技术标签:

【中文标题】如何访问 django 多对多关系的连接表/对象【英文标题】:how to access joining table/object of django many to many relationship 【发布时间】:2017-08-08 08:55:42 【问题描述】:

我有以下型号:

class InvestmentChoice(models.Model):
    title = models.CharField(max_length=64)


class Offering(models.Model):  
    entity = models.OneToOneField(Entity) 
    investment = models.ManyToManyField(InvestmentChoice, blank=True)

创建的连接表有以下字段:

id | offering_id | investment_choice_id
1  |     277     | 5

我想获取具有特定投资选择的实体对象的列表。我认为这意味着我需要访问多对多连接表。

例如,如果我想要所有提供 Offeringinvest_choice_id 为 5 的实体。

如果是这样,我该如何使用 django 查询来做到这一点?

【问题讨论】:

【参考方案1】:

如果您想获得所有投资为 5 的产品实体,以下查询可以完成工作。

Offering.objects.filter(investment__id=5)

如果您想获得某些投资实体的所有产品,请使用in

from django.db.models import Q
investments = Investment.objects.filter(Q(id=1) || Q(id=5))
Offering.objects.filter(investment__in=investments)

有关多对多查询的更多信息,您可以查看Django Doc 和查询read this documentation。

【讨论】:

【参考方案2】:

我可以分两步做到这一点:

choice = InvestmentChoice.objects.get(pk=5)

然后我可以获取所有相关的产品对象,例如:

offerings = choice.offering_set.all()

【讨论】:

【参考方案3】:

根据https://docs.djangoproject.com/en/2.0/topics/db/models/,您可以在 InvestmentChoice 模型中添加如下内容:

entities = models.ManyToManyField(Entity, through='Offering')

希望有帮助!

【讨论】:

以上是关于如何访问 django 多对多关系的连接表/对象的主要内容,如果未能解决你的问题,请参考以下文章

从具有多对多关系 django 的两个表中过滤数据

Django 从多对多关系中删除对象

如何从 django 模板访问多对多“通过”表的属性?

如何从django orm中的多对多关系表中提取数据

DJANGO:与附加字段的多对多关系

如何更新多对多关系中的现有对象(.Net 5)