通过多个多对多关系选择对象



这似乎是一个简单的问题,但它从未在任何地方得到回答,也没有明显的答案。我有两个"级联"的多对多模型:

用户有多对多要标记:

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)  

并且标签具有多对多状态:

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

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

试试这个:

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

(请注意,您在 Tag 上的相关名称令人困惑watched_tag_set因为 Users 是一组,而不是Tags

相关内容

  • 没有找到相关文章

最新更新