2011-01-18 14 views
42

próbuję filtrować queryset korzystającDjango filtr zapytań ze zmienną kolumnie

info=members.filter(name__contains=search_string) 

Problem mam tylko nie wiem, które to pole użytkownik chce wyszukać wyprzedzeniem więc trzeba zastąpić „nazwę "ze zmienną jak w

variable_column = 'name' 
search_type = 'contains' 
filter = variable_column + '__' + search_type 
info=members.filter(filter=search_string) 

Jak to zrobić?

Rich

Odpowiedz

107

Prawie tam ..

members.filter(**{'string__contains': 'search_string'})

Aby zrozumieć, co robi, google wokół:) Understanding kwargs in Python

** rozszerza par klucz/wartość słownika do słowa kluczowego argumentu - wartości pary.

Aby dostosować przykład do rozwiązania:

variable_column = 'name' 
search_type = 'contains' 
filter = variable_column + '__' + search_type 
info=members.filter(**{ filter: search_string }) 
+0

Dzięki bardzo Yuji, to świetnie! – Rich

+0

Też miałem podobne wątpliwości. dzięki, pomogło. – pranjal

+1

To może być najlepsza odpowiedź, którą widziałem od dłuższego czasu. –