姜戈;通过相关对象的计数查询数据库

Django; Querying the Database By Counts Of Related Objects

我有题型:

class Question(models.Model):
....

以及与之相关的答案模型:

class Answer(models.Model):
    user = models.ForeignKey(User)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)

我想过滤掉所有没有答案的问题。我怎样才能在视图中做到这一点?

以下查询获取与答案无关的所有问题:

Question.objects.annotate(answer_count=Count('answer')).filter(answer_count=0)

更新:
您可以按过滤方法中与真实模型字段相同的每个 annotate 参数进行操作,例如所有具有三个以上答案的问题:

Question.objects.annotate(answer_count=Count('answer')).filter(answer_count__gt=3)

注意:
注释方法如何工作?
在所有由 SQL 语言处理的关系数据库 ORM 事务的背后,SQL 更喜欢一些额外的功能,这些功能在许多操作中具有更大的灵活性,特别是在 SELECT 语句中,例如有时我们需要多行的平均值或列数,见下文:

SELECT count(*) from my_table;

如果不喜欢上面的count函数,就必须先把所有的记录都取出来,再计算结果的长度,这种方法难度大,优点多
Django ORM 更喜欢等于 ​​SQL 可用函数,这些函数只必须在注释函数中使用并在 运行.

之前转换为 SQL

More info aboute annotate method