姜戈;通过相关对象的计数查询数据库
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
我有题型:
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 可用函数,这些函数只必须在注释函数中使用并在 运行.