通过存在相关对象来过滤Django模型

时间:2014-07-08 14:45:10

标签: django django-models

考虑以下Django模型:

class User(models.Model):
    pass

class Note(models.Model):
    user = models.ForeignKey(User)
    color = models.CharField()

用户可能有许多不同颜色的笔记。获取以下查询的最佳方法是什么:

  

给我所有注释,但仅限于至少有一个红色注释的用户

天真的方式是获取至少有一个红色音符的用户列表,然后使用user__in=long_list对音符进行过滤,但这看起来很尴尬。解决方案似乎是排除任何没有单个红色注释的用户,但我不知道应该如何做到这一点。

此外,此查询将在非常大的用户和注释集上运行,并且必须具有高性能。

除非绝对需要,否则在没有使用本机SQL的情况下,这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

您可以使用从用户到笔记的向后关系来过滤用户,让我们试试这样的事情

Note.objects.filter(user__note__color='red')