如何在Django中查询双M2M?

时间:2015-01-15 18:01:11

标签: django django-models django-queryset

考虑以下无用的例子。我们有小部件,小部件和用户的集合,每个都由M2M链接。一个小部件可以属于多个集合。每个用户都可以订阅多个集合。

class Widget(models.Model):
    pass

class WidgetCollection(models.Model):
    widgets = models.ManyToManyField('Widget')

class User(models.Model):
    collections = models.ManyToManyField('WidgetCollection')

对于任何给定的用户,我想列出小部件。我可以遍历M2M,但这真的很松弛。我可以让Django从数据库中生成一个Widgets列表吗?

1 个答案:

答案 0 :(得分:2)

您想要的是反向查找:https://docs.djangoproject.com/en/1.7/topics/db/queries/

  

要引用“反向”关系,只需使用模型的小写名称。

由于您需要一个小部件列表,请从该模型开始:

fredsWidgets = Widget.objects.filter(widgetcollection__user=fred)

应该这样做。