Как не включать данные из БД в условие множественных икон в фильтре модели?

В настоящее время я разрабатываю приложение, используя Django.

Я хочу использовать несколько icontains условий в filter с помощью Q, как показано ниже.

но в этом случае, если target_1 или target_2 является empty string(''), то все данные будут получены.

queryset = MyModel.objects.filter(Q(my_field_1__icontains=target_1)| Q(my_field_2__icontains=target_2)).all()

Но я не хочу включать его в данные, если значение любой из целей станет пустой строкой.

Как я могу включить его только если они не включают пустую строку и содержат другие значения?


Python: 3.7.5

Django: 3.2.

Вы можете работать с пониманием словаря, чтобы отфильтровать пустые значения:

data = {'my_field_1__icontains': target_1, 'my_field_2__icontains': target_2}
data = {k: v for k, v in data.items() if v}

if data:
    queryset = MyModel.objects.filter(Q(**data, _connector=Q.OR))
else:
    queryset = MyModel.objects.none()

<1>> проверяется, есть ли хотя бы один элемент с непустой строкой. Если это не так, мы возвращаем пустой кверисет.if data

Вернуться на верх