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

Répondre à