如何在 Django 中跨双 M2M 进行查询?
How to query across a double M2M in Django?
考虑以下无用的示例。我们有小部件,Collection 小部件和用户,每个都由 M2M 链接。一个 Widget 可以属于多个 Collection。每个用户可以订阅多个Collection.
class Widget(models.Model):
pass
class WidgetCollection(models.Model):
widgets = models.ManyToManyField('Widget')
class User(models.Model):
collections = models.ManyToManyField('WidgetCollection')
对于任何给定的用户,我想列出小部件。我可以通过 M2M 循环,但这真的很松弛。我可以让 Django 从数据库中生成一个 Widget 列表吗?
你想要的是反向查找:https://docs.djangoproject.com/en/1.7/topics/db/queries/:
To refer to a “reverse” relationship, just use the lowercase name of the model.
由于您想要一个小部件列表,请从该模型开始:
fredsWidgets = Widget.objects.filter(widgetcollection__user=fred)
应该可以了。
考虑以下无用的示例。我们有小部件,Collection 小部件和用户,每个都由 M2M 链接。一个 Widget 可以属于多个 Collection。每个用户可以订阅多个Collection.
class Widget(models.Model):
pass
class WidgetCollection(models.Model):
widgets = models.ManyToManyField('Widget')
class User(models.Model):
collections = models.ManyToManyField('WidgetCollection')
对于任何给定的用户,我想列出小部件。我可以通过 M2M 循环,但这真的很松弛。我可以让 Django 从数据库中生成一个 Widget 列表吗?
你想要的是反向查找:https://docs.djangoproject.com/en/1.7/topics/db/queries/:
To refer to a “reverse” relationship, just use the lowercase name of the model.
由于您想要一个小部件列表,请从该模型开始:
fredsWidgets = Widget.objects.filter(widgetcollection__user=fred)
应该可以了。