Django / Postgres:显示不同的ManyToMany项目

时间:2015-12-08 21:06:32

标签: python django postgresql

让我们说为了简单起见,我有三个类:

class BigThing(models.Model):
    title = models.CharField(max_length=48)
    stufflists = models.ManyToManyField(StuffList)

class StuffList(models.Model):
    title = models.CharField(max_length=48)
    stuff = models.ManyToManyField(Stuff)

class Stuff(models.Model):
   code = models.CharField(max_length=24)
   title = models.CharField(max_length=48)
   description = RedactorField(blank=True, null=True)

BigThing1包含List1和List3。

List1包含Item1,Item2,Item3。

List2包含Item1,Item2和Item4。

List3仅包含Item3。

我想返回属于BigThing1的所有项目,省略重复项,如下所示:

Item1, Item2, Item3
NOT: Item1, Item2, Item3, Item3
(and obviously not Item4, since that doesn't belong to either of the lists associated with BigThing1)

我觉得有一些涉及prefetch_related或select_related的东西,但我有点难过,因为我是Django / Postgres的新手。在过去,我会做一个JOIN查询,但是无论如何都要承认这些查询是一种黑客攻击,并且想知道这种查询的最佳实践。

1 个答案:

答案 0 :(得分:1)

ManyToMany relationships can be followed backwards(特别是“支持反向m2m查询”的部分)

以下内容应该有效

Stuff.objects.filter(stufflist__bigthing=BigThing1).distinct()