通过多个ManyToMany关系选择对象

时间:2013-09-12 21:54:32

标签: django manytomanyfield

这似乎是一个简单的问题,但在任何地方都没有回答,也没有明显的答案。我有两个“级联”ManyToMany模型:

用户有ManyToMany标记:

class User (models.Model):
  ...
  watches_tags = models.ManyToManyField(Tag, related_name='watched_tag_set', blank=True, null=True)
  ignores_tags = models.ManyToManyField(Tag, related_name='ignored_tag_set', blank=True, null=True)  

并且Tag具有ManyToMany状态:

class Tag (models.Model):
  tag = models.TextField ()
  status = models.ManyToManyField (Status)

是否有一个ORM表达式会给我标记所有用户监视/忽略的标记的状态?我可以在逻辑中迭代标签并连接QuerySets,但是我想在更复杂的基于Q表达式的查询中使用它,我希望尽可能多的工作被推送到数据库引擎。

1 个答案:

答案 0 :(得分:0)

试试这个:

watched_statuses = Status.objects.filter(tag__watched_tag_set=user)
ignored_statuses = Status.objects.filter(tag__ignored_tag_set=user)

(请注意,标记上的相关名称令人困惑,因为watched_tag_set是一组Users,而不是Tags。)