Подтвердить что ты не робот

Использование строки в качестве аргумента для запроса фильтра Django

Я пытаюсь выполнить django-запрос, но с возможностью нескольких разных параметров WHERE. Поэтому я думал о том, чтобы сделать что-то вроде:

querystring = "subcat__id__in=[1,3,5]"
Listing.objects.filter(querystring)

Здесь Листинг определен в моей модели, и он содержит поле "Много-много" "subcat". Однако это вызывает значение ValueError, потому что фильтр не принимает строку в качестве аргумента. Есть ли способ в Python, чтобы строка оценивалась как просто ее содержимое, а не как строка? Что-то вроде оператора печати, который печатает значение строки inline, а не стандартного вывода.

Кстати, причина, по которой я не просто делаю

querystring = [1,3,5]
Listing.objects.filter(subcat__id__in=querystring)

заключается в том, что я не всегда фильтрую для subcat__id, иногда это один или несколько других параметров, и я бы предпочел не записывать кучу отдельных запросов, контролируемых операторами if. Любые советы очень ценятся.

4b9b3361

Ответ 1

Возможно...

filter_dict = {'subcat__id__in': [1,3,5]}
Listing.objects.filter(**filter_dict)

Ответ 2

Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")})