考虑以下Django模型:
class User(models.Model):
pass
class Note(models.Model):
user = models.ForeignKey(User)
color = models.CharField()
用户可能有许多不同颜色的笔记。获取以下查询的最佳方法是什么:
给我所有注释,但仅限于至少有一个红色注释的用户
天真的方式是获取至少有一个红色音符的用户列表,然后使用user__in=long_list
对音符进行过滤,但这看起来很尴尬。解决方案似乎是排除任何没有单个红色注释的用户,但我不知道应该如何做到这一点。
此外,此查询将在非常大的用户和注释集上运行,并且必须具有高性能。
除非绝对需要,否则在没有使用本机SQL的情况下,这样做的正确方法是什么?
答案 0 :(得分:5)
您可以使用从用户到笔记的向后关系来过滤用户,让我们试试这样的事情
Note.objects.filter(user__note__color='red')