Фильтр на основе подсчетов запроса django annotate

#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).