0

私はDjangoを使用しています。この親子レイアウトで、3つの異なるモデルがあります。

申請者->申請->レビュー

申請者は、複数のレビューを持つことができる複数の申請を持つことができます。

名、名前、アプリケーションID、および人に関連付けられているレビューの数を使用してクエリを作成しようとしています。次のクエリステートメントがあります。

list = MUSApplicant.objects.values( 'applicant', 'id', 'applicant__first_name', 'applicant__last_name', 'review').filter(department=department).annotate(acount=Count('review'))

これは私にこのSQLを与えています:

    SELECT apply_application.applicant_id, 
    apply_application.id, 
    apply_applicant.first_name, 
    apply_applicant.last_name, 
    apply_review.id, 
    COUNT(apply_review.id) AS acount 
    FROM apply_application 
    INNER JOIN apply_applicant 
    ON (apply_application.applicant_id = apply_applicant.id) 
    LEFT OUTER JOIN apply_review 
    ON (apply_application.id = apply_review.applicant_id) 
    WHERE apply_application.department = 'departmentname'
    GROUP BY apply_application.applicant_id, apply_application.id, apply_applicant.first_name, apply_applicant.last_name, apply_review.id

これは非常に近いですが、結果は正しくありません。正しくグループ化されていない行が多すぎます。私はそれをapply_review.idでグループ化したいだけで、他のすべてではありません。GROUP BYステートメントにこれらすべての余分なものが追加されないようにするにはどうすればよいですか?

私はドキュメントを際限なく見つめてきましたが、役に立ちませんでした。何かを学ぶために、正確なデータモデルをそこにあるいくつかの例と一致させるのは非常に難しい場合があります。

編集:モデルは次のとおりです。

class Review(models.Model):
    reviewer_eid = models.CharField(max_length=20)
    applicant = models.ForeignKey('Application')
    overall_score = models.FloatField()
    category1 = models.FloatField()
    category2 = models.FloatField()
    category3 = models.FloatField()
    comments = models.TextField()
4

1 に答える 1

1

私はそれを考え出した。Count('review__applicant')の代わりに必要でしたCount('review')。これらの余分なGROUPBYステートメントは、SELECT句にもあるため、実際には効果がないことがわかりました。

于 2013-01-13T02:24:04.410 に答える