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

Yuv*_*dam 3 django django-models

考虑以下Django模型:

class User(models.Model):
    pass

class Note(models.Model):
    user = models.ForeignKey(User)
    color = models.CharField()
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Dar*_*win 5

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

Note.objects.filter(user__note__color='red')
Run Code Online (Sandbox Code Playgroud)