[英]How to get separate total amount of records for given list of ids in django
我正在使用問答答案論壇。
我想要做的就是非常簡單。
在問題列表頁面中,我想顯示問題的答案總數。
我知道如何從問題記錄中獲得所有答案金額 -
answer_records = Answer.objects.filter(question = question_record).count()
但是,我想要一個單獨的查詢,它為所有給定的問題記錄生成單獨的答案記錄數量。 到目前為止我已經嘗試過 -
answer_records = Answer.objects.filter(question__in = question_records).count()
它只生成所有問題記錄的單個計數。
這是我的模特 -
class Question(models.Model):
question_text = models.CharField(max_length = 500)
pub_date = models.DateTimeField('date published')
views = models.BigIntegerField(default = 0)
status = models.BooleanField(default = True)
def __str__(self):
return self.question_text
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete = models.CASCADE, blank = True, null = True)
answer_text = models.TextField(default = '')
pub_date = models.DateTimeField(default = timezone.now)
def __str__(self):
return self.answer_text
我怎樣才能做到這一點? 謝謝你的幫助!
這里的方法是列表理解:
[Answer.objects.filter(question = question_record).count() for question_record in Question.ojects.all()]
在這里,您希望對questions
進行GROUP BY
並返回每個question
的COUNT
個答案。 為實現此目的,您可以使用.annotate()
作為:
Answer.objects.filter(question__in= question_records) \
.values('question') \
.annotate(question_count= COUNT('question'))
另請參閱Django的文檔“為QuerySet中的每個項生成聚合” 。 你會發現它很有用。
values()
:指定將用於“分組依據”的列
Django文檔:
“當使用values()子句來約束結果集中返回的列時,用於評估注釋的方法略有不同。原始結果根據原始QuerySet中的每個結果返回帶注釋的結果,而不是到values()子句中指定的字段的唯一組合“
annotate()
:指定對分組值的操作
Django文檔:
生成匯總值的第二種方法是為QuerySet中的每個對象生成獨立摘要。 例如,如果您要檢索書籍列表,您可能想知道有多少作者為每本書做出了貢獻。 每本書都與作者有多對多的關系; 我們想要總結QuerySet中每本書的這種關系。
可以使用annotate()子句生成每對象摘要。 指定annotate()子句時,QuerySet中的每個對象都將使用指定的值進行批注。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.