24

特定のレコードのセットを取得するために、django sqlite orm 構文を作成しました。

from django.db.models.aggregates import Count

JobStatus.objects.filter(
    status='PRF'
).values_list(
    'job', flat=True
).order_by(
    'job'
).aggregate(
    Count(status)__gt=3
).distinct()

しかし、エラーが発生し、この構文に相当するSQLはうまく機能します。

これは私のSQLに相当します。

SELECT *
  FROM tracker_jobstatus
 WHERE status = 'PRF'
 GROUP BY job_id
HAVING COUNT(status) > 3;

そして、私は次のように結果を得ています

+----+--------+--------+---------+---------------------+---------+
| id | job_id | status | comment | date_and_time       | user_id |
+----+--------+--------+---------+---------------------+---------+
| 13 |      3 | PRF    |         | 2012-11-12 13:16:00 |       1 |
| 31 |      4 | PRF    |         | 2012-11-12 13:48:00 |       1 |
+----+--------+--------+---------+---------------------+---------+

これに相当するdjango sqliteが見つかりません。

誰かが助けてくれれば、とても感謝しています。

4

2 に答える 2

46

最後に、私はそれを理解することができました。ORM 構文は次のようなものです。

from django.db.models.aggregates import Count

JobStatus.objects.filter(
    status='PRF'
).values_list(
    'job', flat=True
).order_by(
    'job'
).annotate(
    count_status=Count('status')
).filter(
    count_status__gt=1
).distinct()
于 2012-11-12T13:17:35.367 に答える
9

このためのより一般的なルール: 新しい列を作成し ( by annotate)、その新しい列をフィルター処理する必要があります。HAVINGこのクエリセットはキーワードに変換されます。

于 2012-11-13T20:09:26.917 に答える