#python #django
#питон #django
Вопрос:
Мне нужно отфильтровать записи на основе общего количества записей для vehicle_owner_organization_id (неотличимый) перед первым аннотированием, т.е. Если общее количество записей в коллекции для vehicle_owner_organization_id больше 1, тогда выполняйте только следующий запрос, получая ежемесячные отдельные подсчеты. Есть ли простой способ сделать это? Или мне нужно запустить другой запрос для фильтрации.
values = ['month', 'city_code']
transacting_users = list(FieldOpsBooking.objects.using(
'analytics').filter(**filter_query).annotate(
month=TruncMonth('pick_up_at')).values(*values).annotate(
count=Count(
'vehicle_owner_organization_id', distinct=True)).values(*values,
'count'))
Комментарии:
1. Пожалуйста, поделитесь соответствующими моделями.
Ответ №1:
Вы можете фильтровать с помощью:
values = ['city_code']
FieldOpsBooking.objects.using('analytics').filter(**filter_query).values(
*values, month=TruncMonth('pick_up_at')
).alias(
ccount=Count('vehicle_owner_organization_id')
).annotate(
count=Count('vehicle_owner_organization_id', distinct=True)
).order_by(*values, 'month').filter(
ccount__gt=1
)
Комментарии:
1. Мне нужно было фильтровать на основе количества vehicle_owner_organization_id перед первым аннотированием, работая только с количеством, превышающим 1 (не различимым).
2. @AkshayHazari: затем вы создаете псевдоним для неуникальных счетчиков или используете другой
.annotate
(для версий до 3.1).