2010-11-28 1 views
21

Я пытаюсь выполнить запрос django, но с возможностью нескольких разных параметров WHERE. Так что я думал сделать что-то вроде:Использование строки в качестве аргумента для запроса фильтра Django

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

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

Кстати, почему я не просто сделать

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

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

ответ

52

Возможно ...

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

Отлично, это именно то, что я искал! Большое спасибо. – danny 2010-11-28 03:41:59

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

 Смежные вопросы

  • Нет связанных вопросов^_^