Подтвердить что ты не робот

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

Я написал синтаксис синтаксиса 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 для этого.

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

4b9b3361

Ответ 1

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

Ответ 2

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