我有一个问题模型:
class Answer(models.Model):
user = models.ForeignKey(User)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
和与之相关的答案模型:
{{1}}
我想过滤掉所有没有答案的问题。我怎么能在视图中做到这一点?
答案 0 :(得分:4)
以下查询获取所有与答案无关的问题:
Question.objects.annotate(answer_count=Count('answer')).filter(answer_count=0)
<强>更新强>
您可以按照与过滤方法中的实际模型字段相同的每个annotate
参数进行操作,例如,所有具有三个以上答案的问题:
Question.objects.annotate(answer_count=Count('answer')).filter(answer_count__gt=3)
注意:强>
注释方法如何工作?
在所有关系-db ORM事务的后面,SQL语言处理事务,并且SQL更喜欢一些额外的函数,这些函数在许多操作中具有更大的灵活性,特别是在SELECT
语句中,对于样本,有时我们需要多个列的平均值或列数行,见下文:
SELECT count(*) from my_table;
如果上count
函数不首选,我们必须首先获取所有记录,并在另一步计算结果长度,这种方法很难并且有许多优点。
Django ORM优先使用相同的SQL可用函数,这些函数只能在注释函数中使用并在运行之前转换为SQL。