Le 10 décembre 2012 14:43, Rémy Hubscher <[email protected]> a écrit :
> Oui c'est bien meilleur en effet :
>
> from djqmixin import Manager, QMixin
>
> from django.db.models import Q
>
> class MarkQMixin(QMixin):
> def exact_in(tags):
> tag_list = Q()
> for tag in tags:
> tag_list = tag_list | Q(tag_name__exact=tag)
> return self.filter(tag_list)
>
>
> ça me semble bien meilleur comme ça avec une seule requête plutôt qu'une
> par tag.
>
J'avais exclu un peu hâtivement les Q() car le 1er paragraphe mettait en
avant les "OR" contrairement au "AND" des filtres de bases.
Du coup, j'en profite pour découvrir django-qmixin :)
Grâce à la déclaration du mixin, je suis sensé pouvoir faire :
Mark.objects.exact_in(['svg', 'xml'])
Si j'en crois le bout de doc et les erreurs que ça remonte, il manque une
définition de self :
>>> from marks.models import Mark
>>> Mark.objects.exact_in(['svg', 'xml'])
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: exact_in() takes exactly 1 argument (2 given)
>>> Mark.objects.exact_in()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/nsteinmetz/Documents/Projets/django/hsh/marks/models.py",
line 17, in exact_in
return self.filter(tag_list)
NameError: global name 'self' is not defined
J'ai essayé avec :
def exact_in(self, tags):
...
mais ça coince encore ; la tag_list n'est pas récupérable via self ?
Un peu rouillé dans mon code et les imbrications avec les mixins :-/
--
Nicolas Steinmetz
http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django