2016-11-19 4 views
1

私は質問回答フォーラムで働いています。djangoのIDの与えられたリストのレコードを別々に取得する方法

私がこれをやろうとしているのはかなり単純です。

質問リストページでは、質問の合計回答数を表示する必要があります。

私は質問のレコードからすべての答え量を取得する方法を知っている - 私はすべて与えられた質問レコードに対して個別の回答レコードの量を生成し、単一のクエリをしたい、

answer_records = Answer.objects.filter(question = question_record).count() 

をしかし。これまでのところ私は試してみました -

answer_records = Answer.objects.filter(question__in = question_records).count() 

すべての質問レコードの1つのカウントのみを生成します。ここで

は私のモデルである -

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 

私はそれをどのように行うことができますか?ご協力いただきありがとうございます!

答えて

0

ここに行くための方法は、リストの内包表記である:ここで

[Answer.objects.filter(question = question_record).count() for question_record in Question.ojects.all()]

0

あなたはquestionsGROUP BYを行い、各questionについて回答のCOUNTを返すようにしたいです。

Answer.objects.filter(question__in= question_records) \ 
    .values('question') \ 
    .annotate(question_count= COUNT('question')) 

はまたDjango's Document on "Generating aggregates for each item in a QuerySet"を見てみましょう:これを達成するためには、.annotate()として使用することができます。あなたはそれが役に立ちます。


values():列が使用されようとしている指定の

Djangoのドキュメント「によってグループ」:

「の値が()句は、列を制約するために使用された場合 が返された場合、注釈を評価する方法はわずかに異なる です。各 の注釈付きの結果を返すのではなく、元の結果がグループ化されます値()句」

annotate()で指定されたフィールドの一意の組み合わせに応じ:

の第二の方法:

Djangoのドキュメントグループ化値に対する操作を指定し集計値を生成することは、QuerySet内の各オブジェクトの独立した要約を生成することです。たとえば、 が書籍のリストを取得している場合は、各書籍に寄稿した作者の数は です。各書籍には、著者との多対多の関係 があります。 QuerySetに各書籍 のこの関係を要約したいと思います。

per-objectサマリーは、annotate()句を使用して生成できます。 annotate()句を指定すると、QuerySet の各オブジェクトに、指定された値の注釈が付けられます。

+0

疑問の余地はありません。新しいセットのすべてのレコードを合計するたびに – user3384985

+0

'question'を' values() 'と' .annotate() 'の' question_id'に置き換えてみてください。私がDjangoを使用して以来、長い時間が経ちました。また、 'SUM 'を' COUNT'に置き換えてください。 –

+0

'.annotate(question_count = Count(' question '))。values(' id '、' question_count ')'のように書き直すべきだと思います。こうすることで、結果を辞書として取得できます:{'id':smth、 'question_count':smth2}。 –

関連する問題