Django-fr

Forum

#1 03-10-2012 13:06:37

abki
Membre
Lieu : Paris
Inscription : 11-08-2010
Messages : 49
Site Web

Django managers et Django-Polymorphic

Bonjour,

Je suis tombé sur un certains nombre de problèmes concernant les managers:

0) La documentation fait référence
à<https://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers-and-model-inheritance>«défault_manager»,
mais je ne trouve aucune trace de cette propriété dans
django master, le seul truc qui ressemble c'est «_default_manager» avec un
underscore.
0bis) A quoi servent «_default_manager» et «_base_manager» ?
1) à quoi sert «Manager.db<https://github.com/django/django/blob/master/django/db/models/manager.py#L25>»
il n'est pas utilisé dans la class Manager donc je me demande bien où il
peut bien être utilisé d'autre
2) Concernant le polymorphisme

   - Est ce que l'un de vous c'est debugger (rapidement) le problème d'héritage
   de niveau supérieur à un django
Django-Polymorphic<https://github.com/chrisglass/django_polymorphic/issues/11>
   - Il me semblait que Polymorphic faisait ça bien par le passé mais ce
   n'est plus le cas, je prend aussi les branches/révision de Django
   Polymorphic qui n'a pas le bug dont je parle dans le point précédent
   - Question bonus: Est ce que vous connaissez une autre app qui fait ça ?

Si je trouve une des réponse à 2) je n'aurais sûrement pas besoin de la
réponse à la question qui suit mais malgré tout je la pose car c'est
étrange et j'ai envie de comprendre smile

J'ai les classes de queryset, manager et modèle suivantes:
https://gist.github.com/3826531

D'après le code de manager.py <https://gist.github.com/3826531>, il suffit
de surcharger get_query_set du manager correctement ce que je pense que je
fais, ceci dit voici ce que j'ai comme résultats:

In [14]: PolymorphicQuerySet(Entry)
> Out[14]: [<Entry: foo>, <Article: bar>, <Article: bar>, <Article: bar>,
> <Article: bar>, <Article: bar>, <Article: bar>]
> In [15]: Entry.objects.all()
> Out[15]: []


Last but not least: J'ai déjà posé cette question quelque part, voir à
plusieurs reprise mais quelle est la raison d'être des classes Manager ?
C'est un encombrement quand on veux écrire des méthodes de queryset car on
ne fait que passer l'appel de méthode au queyset. Pourquoi ne pas juste
avoir un truc du style

class Model():

   objects = Queryset()
   authors_asimov = Queryset().filter(author__name='Asimov')

et basta. Je dois rater des cas d'utilisation du Manager, est ce que
quelqu'un peut éclairer ma lanterne sur ce point aussi ? Est ce que vous
avez une astuce pour simplifier l'écriture des managers ?

Merci d'avance,

Amirouche

Hors ligne

#2 09-10-2012 23:56:51

abki
Membre
Lieu : Paris
Inscription : 11-08-2010
Messages : 49
Site Web

Re : Django managers et Django-Polymorphic

Bonsoir,

J'ai pas encore trouvé la raison d'être des managers, mais j'ai trouvé la
source du bug c'était un pyc qui trainait.

A+


Le 3 octobre 2012 14:06, Amirouche Boubekki
<amirouche.boubekki _AT_ gmail.com>a écrit :

> Bonjour,
>
> Je suis tombé sur un certains nombre de problèmes concernant les managers:
>
> 0) La documentation fait référence à<https://docs.djangoproject.com/en/dev/topics/db/managers/#custom-managers-and-model-inheritance>«défault_manager», mais je ne trouve aucune trace de cette propriété dans
> django master, le seul truc qui ressemble c'est «_default_manager» avec un
> underscore.
> 0bis) A quoi servent «_default_manager» et «_base_manager» ?
> 1) à quoi sert «Manager.db<https://github.com/django/django/blob/master/django/db/models/manager.py#L25>»
> il n'est pas utilisé dans la class Manager donc je me demande bien où il
> peut bien être utilisé d'autre
> 2) Concernant le polymorphisme
>
>    - Est ce que l'un de vous c'est debugger (rapidement) le problème d'héritage
>    de niveau supérieur à un django Django-Polymorphic<https://github.com/chrisglass/django_polymorphic/issues/11>
>    - Il me semblait que Polymorphic faisait ça bien par le passé mais ce
>    n'est plus le cas, je prend aussi les branches/révision de Django
>    Polymorphic qui n'a pas le bug dont je parle dans le point précédent
>    - Question bonus: Est ce que vous connaissez une autre app qui fait ça
>    ?
>
> Si je trouve une des réponse à 2) je n'aurais sûrement pas besoin de la
> réponse à la question qui suit mais malgré tout je la pose car c'est
> étrange et j'ai envie de comprendre smile
>
> J'ai les classes de queryset, manager et modèle suivantes:
> https://gist.github.com/3826531
>
> D'après le code de manager.py <https://gist.github.com/3826531>, il
> suffit de surcharger get_query_set du manager correctement ce que je pense
> que je fais, ceci dit voici ce que j'ai comme résultats:
>
> In [14]: PolymorphicQuerySet(Entry)
>> Out[14]: [<Entry: foo>, <Article: bar>, <Article: bar>, <Article: bar>,
>> <Article: bar>, <Article: bar>, <Article: bar>]
>> In [15]: Entry.objects.all()
>> Out[15]: []
>
>
> Last but not least: J'ai déjà posé cette question quelque part, voir à
> plusieurs reprise mais quelle est la raison d'être des classes Manager ?
> C'est un encombrement quand on veux écrire des méthodes de queryset car on
> ne fait que passer l'appel de méthode au queyset. Pourquoi ne pas juste
> avoir un truc du style
>
> class Model():
>
>    objects = Queryset()
>    authors_asimov = Queryset().filter(author__name='Asimov')
>
> et basta. Je dois rater des cas d'utilisation du Manager, est ce que
> quelqu'un peut éclairer ma lanterne sur ce point aussi ? Est ce que vous
> avez une astuce pour simplifier l'écriture des managers ?
>
> Merci d'avance,
>
> Amirouche
>

Hors ligne

#3 10-10-2012 07:14:33

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Django managers et Django-Polymorphic

Bonjour,


Le 3 oct. 2012 à 14:06, Amirouche Boubekki <amirouche.boubekki _AT_ gmail.com> a écrit :

> 0) La documentation fait référence à «défault_manager», mais je ne trouve aucune trace de cette propriété dans django master, le seul truc qui ressemble c'est «_default_manager» avec un underscore.

Extrait de https://docs.djangoproject.com/en/1.4/topics/db/managers :
"Django interprets the first Manager defined in a class as the "default" Manager, and several parts of Django (including dumpdata) will use that Manager exclusively for that model."

Cordialement,
Xavier Ordoquy.

Hors ligne

Pied de page des forums