Использование строки в качестве аргумента запроса фильтра Django - PullRequest
21 голосов
/ 28 ноября 2010

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

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

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

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

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

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

Ответы [ 2 ]

56 голосов
/ 28 ноября 2010

Возможно ...

filter_dict = {'subcat__id__in': [1,3,5]}
Listing.objects.filter(**filter_dict)
9 голосов
/ 28 ноября 2010
Listing.objects.filter(**{"subcat__id__in": ast.literal_eval("[1,3,5]")})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...