Вы можете использовать оператор if / else, чтобы определить, пуст ли список стран:
if not country:
Model.objects.filter(id__in=id)
else:
Model.objects.filter(id__in=id, country__in=country)
Редактировать:
В комментарии указывалось, что сумма фильтров динам c. Таким образом, в Django .filter()
возвращается еще QuerySet
, а наборы запросов лениво оцениваются, то есть они могут быть связаны и использоваться в oop.
Таким образом, используя распаковку (**
), мы можем составить kwargs
для перехода к .filter()
.
Поскольку точный тип данных / схема фильтров не предусмотрено, я буду использовать словарь в качестве примера, filter_dictionary
. В этом словаре key
- это фильтр, который будет использоваться, а value
- список.
# Compose first Queryset
qs = Model.objects.all()
# Loop over dictionary
for key, value in filter_dictionary.items():
# Use unpacking to compose kwarg
qs.filter(**{'{0}__in'.format(key): value})
# do something with the QuerySet