簡體   English   中英

如何在django中為給定的id列表獲取單獨的記錄總數

[英]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並返回每個questionCOUNT個答案。 為實現此目的,您可以使用.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM