2010-10-13 35 views
2

J'utilise django-taggit, qui gère la connexion de balises à des types de contenu arbitraires. J'ai importé une grande liste de balises, qui contient beaucoup de mots majuscules, ainsi que des mots en minuscules. Maintenant, j'essaye d'obtenir des objets d'une autre classe contenant un ensemble d'étiquettes, mais je veux comparer la casse insensiblement. Lorsque je fais ceci:Django __in minuscule

Media.objects.filter(tags__name__in=['tag1', 'tag2']) 

objets contenant par ex. le tag "Tag1" n'est pas trouvé, seulement ceux avec "tag1" ou "tag2".

Est-il possible dans le ORM django faire quelque chose comme:

Media.objects.filter(tags__name__iin=['tag1', 'tag2']) 

qui agit comme "icontains"?

+0

Il semble que votre meilleur pari est de faire défiler vos tags et de les convertir en minuscules. –

+0

bien - oui, ce serait possible, mais ne résout pas le problème général. – schneck

Répondre

2

Il n'y a pas de moyen facile de le faire. Je ne suis pas sûr à 100%, vous pouvez essayer quelque chose comme ça pour votre problème.

from django.models import Q 

q = Q() 
for tag in tags.split(): 
    q |= Q(tags__name__iexact=tag) 

Media.objects.filter(q) 
+0

Puisque vous utilisez iexact match, vous ne devez pas utiliser .lower() http://docs.djangoproject.com/fr/1.2/ref/models/querysets/#iexact – FallenAngel

+0

@FallenAngel bug résolu – iddqd

+0

Cela fonctionne, Je vous remercie. Cependant, j'apprécierais un opérateur __iin dans l'ORM de Django. – schneck