Как реализовать предложение having в SQLite django ORM

17

Я написал синтаксис синтаксиса django sqlite для получения определенного набора записей:

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 |
+----+--------+--------+---------+---------------------+---------+

Я не могу найти эквивалент sqlite django для этого.

Буду очень благодарен, если кто-то может помочь.     

задан Kalanamith 12.11.2012 в 14:01
источник

2 ответа

32

Наконец, мне удалось разобраться. Синтаксис 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()
    
ответ дан Kalanamith 12.11.2012 в 14:17
источник
7

Более общее правило для этого: вам нужно создать новый столбец ( annotate ), а затем пропустить этот новый столбец. Этот запрос будет преобразован в ключевое слово HAVING .

    
ответ дан Melevir 13.11.2012 в 21:09
источник