Django-fr

Forum

#1 16-11-2009 09:54:35

Guillaume Sueur
Membre
Inscription : 11-08-2010
Messages : 22

retrouver les modèles...

Bonjour,

Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
application django ? J'ai en gros un module dont je connais le  nom et
l'emplacement, contenant des modèles normalisés. Je veux tous les
parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
sûr que c'est possible, mais sans doute à l'aide d'une de ces
abstractions subtiles dont je ne maîtrise pas complètement la
technique.

Merci,

Guillaume

Hors ligne

#2 16-11-2009 10:11:03

Guillaume Sueur
Membre
Inscription : 11-08-2010
Messages : 22

Re : retrouver les modèles...

bonne idée.

Merci

Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
> Bonjour,
>
> Je ne connais pas la réponse à ta question bien que ce soit probablement
> possible.
> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
> l'heure.
> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
> que j'ai progressé.
>
> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
> http://stackoverflow.com/
>
> J'espère que tu trouveras très rapidement la réponse à ta question.
>
> Bien cordialement,
>
> Rémy
>
> Guillaume Sueur a écrit :
> > Bonjour,
> >
> > Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
> > application django ? J'ai en gros un module dont je connais le  nom et
> > l'emplacement, contenant des modèles normalisés. Je veux tous les
> > parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
> > sûr que c'est possible, mais sans doute à l'aide d'une de ces
> > abstractions subtiles dont je ne maîtrise pas complètement la
> > technique.
> >
> > Merci,
> >
> > Guillaume
> >
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
> >
> >   
>
>

Hors ligne

#3 16-11-2009 10:59:49

franck@netandco.net
Membre
Inscription : 11-08-2010
Messages : 8

Re : retrouver les modèles...

Bonjour
Je pense que tu peux regarder du côté de :

from django.db.models import get_models

et de object._meta qui dispose d'une fonction get_all_field_names()

http://docs.djangoproject.com/en/dev/ref/models/options/

exemple :

In [1]: import django.db.models

In [2]: from django.db.models import get_models

In [3]: a = get_models()

In [4]: a
Out[4]:
[<class 'django.contrib.contenttypes.models.ContentType'>,
<class 'django.contrib.auth.models.Permission'>,
<class 'django.contrib.auth.models.Group'>,
<class 'django.contrib.auth.models.User'>,
<class 'django.contrib.auth.models.Message'>,
<class 'django.contrib.sessions.models.Session'>,
<class 'django.contrib.sites.models.Site'>,
<class 'django.contrib.admin.models.LogEntry'>]

In [5]: b = a[6]

In [6]: b
Out[6]: <class 'django.contrib.sites.models.Site'>

In [7]: b._meta
Out[7]: <Options for Site>

In [8]: c = b._meta

In [9]: c.get_all_field_names()
Out[9]: ['domain', 'id', 'name']


Franck Bret



Guillaume Sueur a écrit :
> bonne idée.
>
> Merci
>
> Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
>> Bonjour,
>>
>> Je ne connais pas la réponse à ta question bien que ce soit probablement
>> possible.
>> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
>> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
>> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
>> l'heure.
>> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
>> que j'ai progressé.
>>
>> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
>> http://stackoverflow.com/
>>
>> J'espère que tu trouveras très rapidement la réponse à ta question.
>>
>> Bien cordialement,
>>
>> Rémy
>>
>> Guillaume Sueur a écrit :
>>> Bonjour,
>>>
>>> Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
>>> application django ? J'ai en gros un module dont je connais le  nom et
>>> l'emplacement, contenant des modèles normalisés. Je veux tous les
>>> parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
>>> sûr que c'est possible, mais sans doute à l'aide d'une de ces
>>> abstractions subtiles dont je ne maîtrise pas complètement la
>>> technique.
>>>
>>> Merci,
>>>
>>> Guillaume
>>>
>>> _______________________________________________
>>> django mailing list
>>> django _AT_ lists.afpy.org
>>> http://lists.afpy.org/mailman/listinfo/django
>>>
>>>   
>>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#4 16-11-2009 11:15:10

Bruno Renié
Membre
Inscription : 11-08-2010
Messages : 52

Re : retrouver les modèles...

2009/11/16 franck _AT_ netandco.net <franck _AT_ netandco.net>:
> Bonjour
> Je pense que tu peux regarder du côté de :
>
> from django.db.models import get_models

Tiens, je ne connaissais pas get_models(), apparement ce n'est pas documenté...

J'ai réinventé la roue, peut-être d'une autre manière :

from django.contrib.auth import models

for attr in dir(models):
    attribute = getattr(models, attr)
    if hasattr(attribute, '__mro__') and 'django.db.models.base.Model'
in str(attribute.__mro__):
        print "%s is a model" % attr

Enfin bon, la solution de Django doit être plus propre...

Bonne journée,
Bruno


>
> et de object._meta qui dispose d'une fonction get_all_field_names()
>
> http://docs.djangoproject.com/en/dev/ref/models/options/
>
> exemple :
>
> In [1]: import django.db.models
>
> In [2]: from django.db.models import get_models
>
> In [3]: a = get_models()
>
> In [4]: a
> Out[4]:
> [<class 'django.contrib.contenttypes.models.ContentType'>,
>  <class 'django.contrib.auth.models.Permission'>,
>  <class 'django.contrib.auth.models.Group'>,
>  <class 'django.contrib.auth.models.User'>,
>  <class 'django.contrib.auth.models.Message'>,
>  <class 'django.contrib.sessions.models.Session'>,
>  <class 'django.contrib.sites.models.Site'>,
>  <class 'django.contrib.admin.models.LogEntry'>]
>
> In [5]: b = a[6]
>
> In [6]: b
> Out[6]: <class 'django.contrib.sites.models.Site'>
>
> In [7]: b._meta
> Out[7]: <Options for Site>
>
> In [8]: c = b._meta
>
> In [9]: c.get_all_field_names()
> Out[9]: ['domain', 'id', 'name']
>
>
> Franck Bret
>
>
>
> Guillaume Sueur a écrit :
>> bonne idée.
>>
>> Merci
>>
>> Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
>>> Bonjour,
>>>
>>> Je ne connais pas la réponse à ta question bien que ce soit probablement
>>> possible.
>>> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
>>> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
>>> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
>>> l'heure.
>>> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
>>> que j'ai progressé.
>>>
>>> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
>>> http://stackoverflow.com/
>>>
>>> J'espère que tu trouveras très rapidement la réponse à ta question.
>>>
>>> Bien cordialement,
>>>
>>> Rémy
>>>
>>> Guillaume Sueur a écrit :
>>>> Bonjour,
>>>>
>>>> Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
>>>> application django ? J'ai en gros un module dont je connais le  nom et
>>>> l'emplacement, contenant des modèles normalisés. Je veux tous les
>>>> parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
>>>> sûr que c'est possible, mais sans doute à l'aide d'une de ces
>>>> abstractions subtiles dont je ne maîtrise pas complètement la
>>>> technique.
>>>>
>>>> Merci,
>>>>
>>>> Guillaume
>>>>
>>>> _______________________________________________
>>>> django mailing list
>>>> django _AT_ lists.afpy.org
>>>> http://lists.afpy.org/mailman/listinfo/django
>>>>
>>>>
>>>
>>
>>
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#5 16-11-2009 11:16:46

Guillaume Sueur
Membre
Inscription : 11-08-2010
Messages : 22

Re : retrouver les modèles...

je vais essayer tout ça. Merci à tous les deux !


Le lundi 16 novembre 2009 à 11:15 +0100, Bruno Renié a écrit :
> 2009/11/16 franck _AT_ netandco.net <franck _AT_ netandco.net>:
> > Bonjour
> > Je pense que tu peux regarder du côté de :
> >
> > from django.db.models import get_models
>
> Tiens, je ne connaissais pas get_models(), apparement ce n'est pas documenté...
>
> J'ai réinventé la roue, peut-être d'une autre manière :
>
> from django.contrib.auth import models
>
> for attr in dir(models):
>     attribute = getattr(models, attr)
>     if hasattr(attribute, '__mro__') and 'django.db.models.base.Model'
> in str(attribute.__mro__):
>         print "%s is a model" % attr
>
> Enfin bon, la solution de Django doit être plus propre...
>
> Bonne journée,
> Bruno
>
>
> >
> > et de object._meta qui dispose d'une fonction get_all_field_names()
> >
> > http://docs.djangoproject.com/en/dev/ref/models/options/
> >
> > exemple :
> >
> > In [1]: import django.db.models
> >
> > In [2]: from django.db.models import get_models
> >
> > In [3]: a = get_models()
> >
> > In [4]: a
> > Out[4]:
> > [<class 'django.contrib.contenttypes.models.ContentType'>,
> >  <class 'django.contrib.auth.models.Permission'>,
> >  <class 'django.contrib.auth.models.Group'>,
> >  <class 'django.contrib.auth.models.User'>,
> >  <class 'django.contrib.auth.models.Message'>,
> >  <class 'django.contrib.sessions.models.Session'>,
> >  <class 'django.contrib.sites.models.Site'>,
> >  <class 'django.contrib.admin.models.LogEntry'>]
> >
> > In [5]: b = a[6]
> >
> > In [6]: b
> > Out[6]: <class 'django.contrib.sites.models.Site'>
> >
> > In [7]: b._meta
> > Out[7]: <Options for Site>
> >
> > In [8]: c = b._meta
> >
> > In [9]: c.get_all_field_names()
> > Out[9]: ['domain', 'id', 'name']
> >
> >
> > Franck Bret
> >
> >
> >
> > Guillaume Sueur a écrit :
> >> bonne idée.
> >>
> >> Merci
> >>
> >> Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
> >>> Bonjour,
> >>>
> >>> Je ne connais pas la réponse à ta question bien que ce soit probablement
> >>> possible.
> >>> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
> >>> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
> >>> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
> >>> l'heure.
> >>> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
> >>> que j'ai progressé.
> >>>
> >>> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
> >>> http://stackoverflow.com/
> >>>
> >>> J'espère que tu trouveras très rapidement la réponse à ta question.
> >>>
> >>> Bien cordialement,
> >>>
> >>> Rémy
> >>>
> >>> Guillaume Sueur a écrit :
> >>>> Bonjour,
> >>>>
> >>>> Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
> >>>> application django ? J'ai en gros un module dont je connais le  nom et
> >>>> l'emplacement, contenant des modèles normalisés. Je veux tous les
> >>>> parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
> >>>> sûr que c'est possible, mais sans doute à l'aide d'une de ces
> >>>> abstractions subtiles dont je ne maîtrise pas complètement la
> >>>> technique.
> >>>>
> >>>> Merci,
> >>>>
> >>>> Guillaume
> >>>>
> >>>> _______________________________________________
> >>>> django mailing list
> >>>> django _AT_ lists.afpy.org
> >>>> http://lists.afpy.org/mailman/listinfo/django
> >>>>
> >>>>
> >>>
> >>
> >>
> >> _______________________________________________
> >> django mailing list
> >> django _AT_ lists.afpy.org
> >> http://lists.afpy.org/mailman/listinfo/django
> >
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#6 16-11-2009 12:27:48

Guillaume Sueur
Membre
Inscription : 11-08-2010
Messages : 22

Re : retrouver les modèles...

La solution de franck est bien la bonne :

from django.db.models import get_app
from django.db.models import get_models

my_app = get_app(my_app_name)
for m in get_models(my_app):
m_name = string.lower(m.__name__)
...

dans mon cas, j'ai un objet sélectionné. Je peux alors retrouver tous
les objets qui l'ont en clé étrangère ou qu'il référence en clé
étrangère :
res = eval("selected_object." + m_name ) # pour les objets "parents"
res = eval("list(selected_object." + m_name +
"_set.all().values('code','nom'))") # pour les objets "enfants"

trop puissant !

Merci

Guillaume



Le lundi 16 novembre 2009 à 11:16 +0100, Guillaume Sueur a écrit :
> je vais essayer tout ça. Merci à tous les deux !
>
>
> Le lundi 16 novembre 2009 à 11:15 +0100, Bruno Renié a écrit :
> > 2009/11/16 franck _AT_ netandco.net <franck _AT_ netandco.net>:
> > > Bonjour
> > > Je pense que tu peux regarder du côté de :
> > >
> > > from django.db.models import get_models
> >
> > Tiens, je ne connaissais pas get_models(), apparement ce n'est pas documenté...
> >
> > J'ai réinventé la roue, peut-être d'une autre manière :
> >
> > from django.contrib.auth import models
> >
> > for attr in dir(models):
> >     attribute = getattr(models, attr)
> >     if hasattr(attribute, '__mro__') and 'django.db.models.base.Model'
> > in str(attribute.__mro__):
> >         print "%s is a model" % attr
> >
> > Enfin bon, la solution de Django doit être plus propre...
> >
> > Bonne journée,
> > Bruno
> >
> >
> > >
> > > et de object._meta qui dispose d'une fonction get_all_field_names()
> > >
> > > http://docs.djangoproject.com/en/dev/ref/models/options/
> > >
> > > exemple :
> > >
> > > In [1]: import django.db.models
> > >
> > > In [2]: from django.db.models import get_models
> > >
> > > In [3]: a = get_models()
> > >
> > > In [4]: a
> > > Out[4]:
> > > [<class 'django.contrib.contenttypes.models.ContentType'>,
> > >  <class 'django.contrib.auth.models.Permission'>,
> > >  <class 'django.contrib.auth.models.Group'>,
> > >  <class 'django.contrib.auth.models.User'>,
> > >  <class 'django.contrib.auth.models.Message'>,
> > >  <class 'django.contrib.sessions.models.Session'>,
> > >  <class 'django.contrib.sites.models.Site'>,
> > >  <class 'django.contrib.admin.models.LogEntry'>]
> > >
> > > In [5]: b = a[6]
> > >
> > > In [6]: b
> > > Out[6]: <class 'django.contrib.sites.models.Site'>
> > >
> > > In [7]: b._meta
> > > Out[7]: <Options for Site>
> > >
> > > In [8]: c = b._meta
> > >
> > > In [9]: c.get_all_field_names()
> > > Out[9]: ['domain', 'id', 'name']
> > >
> > >
> > > Franck Bret
> > >
> > >
> > >
> > > Guillaume Sueur a écrit :
> > >> bonne idée.
> > >>
> > >> Merci
> > >>
> > >> Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
> > >>> Bonjour,
> > >>>
> > >>> Je ne connais pas la réponse à ta question bien que ce soit probablement
> > >>> possible.
> > >>> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
> > >>> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
> > >>> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
> > >>> l'heure.
> > >>> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
> > >>> que j'ai progressé.
> > >>>
> > >>> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
> > >>> http://stackoverflow.com/
> > >>>
> > >>> J'espère que tu trouveras très rapidement la réponse à ta question.
> > >>>
> > >>> Bien cordialement,
> > >>>
> > >>> Rémy
> > >>>
> > >>> Guillaume Sueur a écrit :
> > >>>> Bonjour,
> > >>>>
> > >>>> Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
> > >>>> application django ? J'ai en gros un module dont je connais le  nom et
> > >>>> l'emplacement, contenant des modèles normalisés. Je veux tous les
> > >>>> parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
> > >>>> sûr que c'est possible, mais sans doute à l'aide d'une de ces
> > >>>> abstractions subtiles dont je ne maîtrise pas complètement la
> > >>>> technique.
> > >>>>
> > >>>> Merci,
> > >>>>
> > >>>> Guillaume
> > >>>>
> > >>>> _______________________________________________
> > >>>> django mailing list
> > >>>> django _AT_ lists.afpy.org
> > >>>> http://lists.afpy.org/mailman/listinfo/django
> > >>>>
> > >>>>
> > >>>
> > >>
> > >>
> > >> _______________________________________________
> > >> django mailing list
> > >> django _AT_ lists.afpy.org
> > >> http://lists.afpy.org/mailman/listinfo/django
> > >
> > > _______________________________________________
> > > django mailing list
> > > django _AT_ lists.afpy.org
> > > http://lists.afpy.org/mailman/listinfo/django
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#7 16-11-2009 12:47:06

franck@netandco.net
Membre
Inscription : 11-08-2010
Messages : 8

Re : retrouver les modèles...

Peut être les méthodes suivantes peuvent elles aussi t'aider au même
résultats, mais je n'ai pas pris le temps de vérifier... :
c.get_all_field_names
c.get_all_related_m2m_objects_with_model
c.get_all_related_many_to_many_objects
c.get_all_related_objects
c.get_all_related_objects_with_model
c.get_field
c.get_field_by_name
c.get_fields_with_model
c.get_latest_by
c.get_m2m_with_model
c.get_ordered_objects
c.get_parent_list


Guillaume Sueur a écrit :
> La solution de franck est bien la bonne :
>
> from django.db.models import get_app
> from django.db.models import get_models
>
> my_app = get_app(my_app_name)
> for m in get_models(my_app):
> m_name = string.lower(m.__name__)
> ...
>
> dans mon cas, j'ai un objet sélectionné. Je peux alors retrouver tous
> les objets qui l'ont en clé étrangère ou qu'il référence en clé
> étrangère :
> res = eval("selected_object." + m_name ) # pour les objets "parents"
> res = eval("list(selected_object." + m_name +
> "_set.all().values('code','nom'))") # pour les objets "enfants"
>
> trop puissant !
>
> Merci
>
> Guillaume
>
>
>
> Le lundi 16 novembre 2009 à 11:16 +0100, Guillaume Sueur a écrit :
>> je vais essayer tout ça. Merci à tous les deux !
>>
>>
>> Le lundi 16 novembre 2009 à 11:15 +0100, Bruno Renié a écrit :
>>> 2009/11/16 franck _AT_ netandco.net <franck _AT_ netandco.net>:
>>>> Bonjour
>>>> Je pense que tu peux regarder du côté de :
>>>>
>>>> from django.db.models import get_models
>>> Tiens, je ne connaissais pas get_models(), apparement ce n'est pas documenté...
>>>
>>> J'ai réinventé la roue, peut-être d'une autre manière :
>>>
>>> from django.contrib.auth import models
>>>
>>> for attr in dir(models):
>>>     attribute = getattr(models, attr)
>>>     if hasattr(attribute, '__mro__') and 'django.db.models.base.Model'
>>> in str(attribute.__mro__):
>>>         print "%s is a model" % attr
>>>
>>> Enfin bon, la solution de Django doit être plus propre...
>>>
>>> Bonne journée,
>>> Bruno
>>>
>>>
>>>> et de object._meta qui dispose d'une fonction get_all_field_names()
>>>>
>>>> http://docs.djangoproject.com/en/dev/ref/models/options/
>>>>
>>>> exemple :
>>>>
>>>> In [1]: import django.db.models
>>>>
>>>> In [2]: from django.db.models import get_models
>>>>
>>>> In [3]: a = get_models()
>>>>
>>>> In [4]: a
>>>> Out[4]:
>>>> [<class 'django.contrib.contenttypes.models.ContentType'>,
>>>>  <class 'django.contrib.auth.models.Permission'>,
>>>>  <class 'django.contrib.auth.models.Group'>,
>>>>  <class 'django.contrib.auth.models.User'>,
>>>>  <class 'django.contrib.auth.models.Message'>,
>>>>  <class 'django.contrib.sessions.models.Session'>,
>>>>  <class 'django.contrib.sites.models.Site'>,
>>>>  <class 'django.contrib.admin.models.LogEntry'>]
>>>>
>>>> In [5]: b = a[6]
>>>>
>>>> In [6]: b
>>>> Out[6]: <class 'django.contrib.sites.models.Site'>
>>>>
>>>> In [7]: b._meta
>>>> Out[7]: <Options for Site>
>>>>
>>>> In [8]: c = b._meta
>>>>
>>>> In [9]: c.get_all_field_names()
>>>> Out[9]: ['domain', 'id', 'name']
>>>>
>>>>
>>>> Franck Bret
>>>>
>>>>
>>>>
>>>> Guillaume Sueur a écrit :
>>>>> bonne idée.
>>>>>
>>>>> Merci
>>>>>
>>>>> Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
>>>>>> Bonjour,
>>>>>>
>>>>>> Je ne connais pas la réponse à ta question bien que ce soit probablement
>>>>>> possible.
>>>>>> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
>>>>>> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
>>>>>> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
>>>>>> l'heure.
>>>>>> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
>>>>>> que j'ai progressé.
>>>>>>
>>>>>> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
>>>>>> http://stackoverflow.com/
>>>>>>
>>>>>> J'espère que tu trouveras très rapidement la réponse à ta question.
>>>>>>
>>>>>> Bien cordialement,
>>>>>>
>>>>>> Rémy
>>>>>>
>>>>>> Guillaume Sueur a écrit :
>>>>>>> Bonjour,
>>>>>>>
>>>>>>> Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
>>>>>>> application django ? J'ai en gros un module dont je connais le  nom et
>>>>>>> l'emplacement, contenant des modèles normalisés. Je veux tous les
>>>>>>> parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
>>>>>>> sûr que c'est possible, mais sans doute à l'aide d'une de ces
>>>>>>> abstractions subtiles dont je ne maîtrise pas complètement la
>>>>>>> technique.
>>>>>>>
>>>>>>> Merci,
>>>>>>>
>>>>>>> Guillaume
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> django mailing list
>>>>>>> django _AT_ lists.afpy.org
>>>>>>> http://lists.afpy.org/mailman/listinfo/django
>>>>>>>
>>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> django mailing list
>>>>> django _AT_ lists.afpy.org
>>>>> http://lists.afpy.org/mailman/listinfo/django
>>>> _______________________________________________
>>>> django mailing list
>>>> django _AT_ lists.afpy.org
>>>> http://lists.afpy.org/mailman/listinfo/django
>>> _______________________________________________
>>> django mailing list
>>> django _AT_ lists.afpy.org
>>> http://lists.afpy.org/mailman/listinfo/django
>>
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#8 16-11-2009 12:53:07

Guillaume Sueur
Membre
Inscription : 11-08-2010
Messages : 22

Re : retrouver les modèles...

en effet, ça peut m'éviter de passer par un "eval". Je vais regarder
ça.

Merci encore.

Guillaume

Le lundi 16 novembre 2009 à 12:47 +0100, franck _AT_ netandco.net a écrit :
> Peut être les méthodes suivantes peuvent elles aussi t'aider au même
> résultats, mais je n'ai pas pris le temps de vérifier... :
> c.get_all_field_names
> c.get_all_related_m2m_objects_with_model
> c.get_all_related_many_to_many_objects
> c.get_all_related_objects
> c.get_all_related_objects_with_model
> c.get_field
> c.get_field_by_name
> c.get_fields_with_model
> c.get_latest_by
> c.get_m2m_with_model
> c.get_ordered_objects
> c.get_parent_list
>
>
> Guillaume Sueur a écrit :
> > La solution de franck est bien la bonne :
> >
> > from django.db.models import get_app
> > from django.db.models import get_models
> >
> > my_app = get_app(my_app_name)
> > for m in get_models(my_app):
> > m_name = string.lower(m.__name__)
> > ...
> >
> > dans mon cas, j'ai un objet sélectionné. Je peux alors retrouver tous
> > les objets qui l'ont en clé étrangère ou qu'il référence en clé
> > étrangère :
> > res = eval("selected_object." + m_name ) # pour les objets "parents"
> > res = eval("list(selected_object." + m_name +
> > "_set.all().values('code','nom'))") # pour les objets "enfants"
> >
> > trop puissant !
> >
> > Merci
> >
> > Guillaume
> >
> >
> >
> > Le lundi 16 novembre 2009 à 11:16 +0100, Guillaume Sueur a écrit :
> >> je vais essayer tout ça. Merci à tous les deux !
> >>
> >>
> >> Le lundi 16 novembre 2009 à 11:15 +0100, Bruno Renié a écrit :
> >>> 2009/11/16 franck _AT_ netandco.net <franck _AT_ netandco.net>:
> >>>> Bonjour
> >>>> Je pense que tu peux regarder du côté de :
> >>>>
> >>>> from django.db.models import get_models
> >>> Tiens, je ne connaissais pas get_models(), apparement ce n'est pas documenté...
> >>>
> >>> J'ai réinventé la roue, peut-être d'une autre manière :
> >>>
> >>> from django.contrib.auth import models
> >>>
> >>> for attr in dir(models):
> >>>     attribute = getattr(models, attr)
> >>>     if hasattr(attribute, '__mro__') and 'django.db.models.base.Model'
> >>> in str(attribute.__mro__):
> >>>         print "%s is a model" % attr
> >>>
> >>> Enfin bon, la solution de Django doit être plus propre...
> >>>
> >>> Bonne journée,
> >>> Bruno
> >>>
> >>>
> >>>> et de object._meta qui dispose d'une fonction get_all_field_names()
> >>>>
> >>>> http://docs.djangoproject.com/en/dev/ref/models/options/
> >>>>
> >>>> exemple :
> >>>>
> >>>> In [1]: import django.db.models
> >>>>
> >>>> In [2]: from django.db.models import get_models
> >>>>
> >>>> In [3]: a = get_models()
> >>>>
> >>>> In [4]: a
> >>>> Out[4]:
> >>>> [<class 'django.contrib.contenttypes.models.ContentType'>,
> >>>>  <class 'django.contrib.auth.models.Permission'>,
> >>>>  <class 'django.contrib.auth.models.Group'>,
> >>>>  <class 'django.contrib.auth.models.User'>,
> >>>>  <class 'django.contrib.auth.models.Message'>,
> >>>>  <class 'django.contrib.sessions.models.Session'>,
> >>>>  <class 'django.contrib.sites.models.Site'>,
> >>>>  <class 'django.contrib.admin.models.LogEntry'>]
> >>>>
> >>>> In [5]: b = a[6]
> >>>>
> >>>> In [6]: b
> >>>> Out[6]: <class 'django.contrib.sites.models.Site'>
> >>>>
> >>>> In [7]: b._meta
> >>>> Out[7]: <Options for Site>
> >>>>
> >>>> In [8]: c = b._meta
> >>>>
> >>>> In [9]: c.get_all_field_names()
> >>>> Out[9]: ['domain', 'id', 'name']
> >>>>
> >>>>
> >>>> Franck Bret
> >>>>
> >>>>
> >>>>
> >>>> Guillaume Sueur a écrit :
> >>>>> bonne idée.
> >>>>>
> >>>>> Merci
> >>>>>
> >>>>> Le lundi 16 novembre 2009 à 17:02 +0800, Remy HUBSCHER a écrit :
> >>>>>> Bonjour,
> >>>>>>
> >>>>>> Je ne connais pas la réponse à ta question bien que ce soit probablement
> >>>>>> possible.
> >>>>>> Je ne sais pas si tu connais StackOverflow.com, c'est un site anglophone
> >>>>>> qui regroupe à l'heure actuelle 1/3 des developpeurs pro de la planète.
> >>>>>> Sur des questions comme celle ci, sur Python, tu obtiens la réponse dans
> >>>>>> l'heure.
> >>>>>> C'est très appréciable. Je l'utilise depuis prêt d'un mois et qu'est-ce
> >>>>>> que j'ai progressé.
> >>>>>>
> >>>>>> Je te recommande d'y jeter un coup d'œil si tu ne connais pas déjà.
> >>>>>> http://stackoverflow.com/
> >>>>>>
> >>>>>> J'espère que tu trouveras très rapidement la réponse à ta question.
> >>>>>>
> >>>>>> Bien cordialement,
> >>>>>>
> >>>>>> Rémy
> >>>>>>
> >>>>>> Guillaume Sueur a écrit :
> >>>>>>> Bonjour,
> >>>>>>>
> >>>>>>> Connaîtriez-vous un moyen de récupérer les noms  des modèles d'une
> >>>>>>> application django ? J'ai en gros un module dont je connais le  nom et
> >>>>>>> l'emplacement, contenant des modèles normalisés. Je veux tous les
> >>>>>>> parcourir dans une boucle, sans avoir à connaître leurs noms. Je suis
> >>>>>>> sûr que c'est possible, mais sans doute à l'aide d'une de ces
> >>>>>>> abstractions subtiles dont je ne maîtrise pas complètement la
> >>>>>>> technique.
> >>>>>>>
> >>>>>>> Merci,
> >>>>>>>
> >>>>>>> Guillaume
> >>>>>>>
> >>>>>>> _______________________________________________
> >>>>>>> django mailing list
> >>>>>>> django _AT_ lists.afpy.org
> >>>>>>> http://lists.afpy.org/mailman/listinfo/django
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> django mailing list
> >>>>> django _AT_ lists.afpy.org
> >>>>> http://lists.afpy.org/mailman/listinfo/django
> >>>> _______________________________________________
> >>>> django mailing list
> >>>> django _AT_ lists.afpy.org
> >>>> http://lists.afpy.org/mailman/listinfo/django
> >>> _______________________________________________
> >>> django mailing list
> >>> django _AT_ lists.afpy.org
> >>> http://lists.afpy.org/mailman/listinfo/django
> >>
> >> _______________________________________________
> >> django mailing list
> >> django _AT_ lists.afpy.org
> >> http://lists.afpy.org/mailman/listinfo/django
> >
> >
> >
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
>
>

Hors ligne

Pied de page des forums