2010-07-08 8 views
0

Je me demande simplement s'il y a un exemple que je pourrais prendre d'autres sur le sujet.Bonnes pratiques pour une page de recherche flexible - Django

J'ai une page dans Django qui utilise des filtres, afin d'effectuer des recherches.

En ce moment je fais une simple vérification des paramètres GET et l'ajout d'un .filter() à un queryset en conséquence:

if color: 
    query.filter(color=color) 

Cela se sent un peu comme une façon laide à faire , et j'ai été un peu coincé en me demandant comment je pourrais le rendre plus dynamique.

Des idées?

Répondre

5

Essayez ceci:

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

Cela vous permettra de faire des demandes similaires /search/?color=red&size=1 ou /search/?model=Nikon&color=black.

+0

pas moyen! c'est bien! Pouvez-vous utiliser des dicts avec n'importe quelle fonction, en utilisant la méthode que vous venez de me montrer? – RadiantHex

+0

des suggestions pour DateTime? – RadiantHex

+0

Vous pouvez, mais vous ne pouvez pas utiliser des caractères internationaux comme les noms des arguments de mot-clé, si vous voulez faire cela, vous devez utiliser cette syntaxe: test def (** kwargs): param = kwargs [ « параметр »] # faire quelque chose. –

Questions connexes