2010-07-08 1 views
0

Мне просто интересно, есть ли какой-нибудь пример, который я мог бы взять у других по этой теме.Хорошая практика для гибкой страницы поиска - Django

У меня есть страница в Django, которая использует фильтры для выполнения поиска.

На данный момент я делаю простую проверку для параметров GET и добавление .filter() к QuerySet соответственно:

if color: 
    query.filter(color=color) 

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

Любые идеи?

ответ

5

Попробуйте это:

ALLOWED = ('color', 'size', 'model') 
kwargs = dict(
    (key, value) 
    for key, value in request.GET.items() 
    if key in ALLOWED 
) 
query.filter(**kwargs) 

Это позволит вам делать запросы, как этот /search/?color=red&size=1 или /search/?model=Nikon&color=black.

+0

нет! отлично! Можете ли вы использовать dicts с любой функцией, используя метод, который вы только что показали мне? – RadiantHex

+0

любые предложения для DateTime? – RadiantHex

+0

Вы можете, но вы не можете использовать международные символы в качестве имен аргументов ключевого слова, если вы хотите это сделать, вы должны использовать этот синтаксис: def test (** kwargs): param = kwargs ['параметр'] # сделай что-нибудь. –