2009-07-11 6 views
1

j'ai un dict produit à un endroit comme celui-ci:django colonne dynamique requête

d = { 'k1': 'v1', 'K2': 'v2', ...}

et je veux construire une requête comme:

SomeModule.objects.filter (Q (k1 = v1) | Q (v2 = K2) | ...)

que dois-je faire pour construire la requête?

Répondre

3

si vous faites « OU » requêtes, quelque chose comme ceci:

from django.db.models import Q 

q = Q() 
for k,v in d.iteritems(): 
     q |= Q(**{'%s__equal' % k: v}) 

SomeModule.objects.filter(q) 

Pour « ET » requêtes, il est beaucoup plus simple comme indiqué dans la réponse à In Django, how does one filter a QuerySet with dynamic field lookups:

SomeModule.objects.filter(**d) 
0

Vous pouvez également faites-le de façon fonctionnelle en une seule ligne sans ces variables temporaires embêtantes imposées par le paradigme procédural:

SomeModule.objects.filter(reduce(Q.__or__, (Q(k=v) for k, v in d.iteritems()))) 
Questions connexes