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

时间:2017-03-16 23:37:48

标签: python django django-models many-to-many django-orm

我有以下型号:

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

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

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

如果是这样,我怎么能用django查询呢?

3 个答案:

答案 0 :(得分:0)

如果您希望获得所有具有投资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

答案 1 :(得分:0)

我能够分两步完成:

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

然后我可以获得所有关联的提供对象:

offerings = choice.offering_set.all()

答案 2 :(得分:0)

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

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

希望有所帮助!