Django нет запроса к связанным полям - PullRequest
1 голос
/ 21 апреля 2020

Я хочу отфильтровать объекты, у которых есть только связанные объекты со значениями в конечном наборе - вот как я пытался это записать:

trips = Trip.objects\
    .filter(study=study, field_values__field__name='mode', field_values__int_value__in=modes)\
    .exclude(study=study, field_values__field__name='mode', field_values__int_value__not_in=modes)\
    .all()

Я думаю, что это будет работать, за исключением того, что 'not in' - это не действительный оператор. К сожалению, «не режимы» здесь бесконечное множество - это может быть любой int не в режимах, поэтому я не могу «исключить в [не режимы]».

Как я могу написать это с Django запрос?

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете отфильтровать это с помощью:

from django.db.models import Count, F, Q

Trip.objects.filter(
    study=study,
    field__values__field__name='mode'
).annotate(
    total_values=Count('field_values')
).filter(
    <b>total_values=Count('field_values', filter=Q(field_values__int_value__in=modes))</b>,
    total_values__gt=0
)

Здесь мы таким образом подсчитываем общее количество связанных field_values с name_model и тех, где int_value находится в данном modes , Если оба одинаковы, мы знаем, что вне этого значения не существует.

...