Django-fr

Forum

#1 23-06-2011 15:12:11

galbourn
Membre
Inscription : 04-03-2011
Messages : 6

Interface admin

Bonjour

J'ai défini 2 classes dans mon modèle

classe A:
attr1
attr2

Classe B:
attri1
attribut 2 qui est une clé etrangére sur la classe A

Dans l'interface admin de la classe A, je souhaite afficher tout les enregistrements associés de la classe B.

J'ai utilisé TabularInLine , et il m'affiche bien les enregistrements associés de la classe B.
Par contre, il m'affiche le champ en 'Input Text' et moi je voudrais une SELECT (liste déroulante)

Je n'arrive pas à faire cela , j'ai essayé de passer par un ModelForm et mettre ModelChoiceField mais dans ce cas là, il m'affiche une liste déroulante mais il ne met pas en souligné l'élement sélectionné.

Est-ce que quelqu'un a une idée ?

Merci

Hors ligne

#2 23-06-2011 15:16:43

Florian Strzelecki
Membre
Inscription : 11-08-2010
Messages : 40

Re : Interface admin

De quel champ parles-tu ? Un champ qui représente un attribut de la classe B
? De la classe A ?
Pourrais-tu donner directement la définition de tes classes et de ton admin
?
Quels type de fields utilises-tu ?

Le 23 juin 2011 16:12, galbourn <valerie.ouarnier _AT_ inria.fr> a écrit :

> J'ai utilisé TabularInLine , et il m'affiche bien les enregistrements
> associés de la classe B.
> Par contre, il m'affiche le champ en 'Input Text' et moi je voudrais une
> SELECT (liste déroulante)
>

Hors ligne

#3 23-06-2011 15:22:29

galbourn
Membre
Inscription : 04-03-2011
Messages : 6

Re : Interface admin

Models
class Entity(models.Model):
    research_center = models.ForeignKey(ResearchCenter)
    structure = models.ForeignKey(Structure)
    id_gef = models.PositiveIntegerField(null=True, blank=True)
class Group(models.Model):
    name = models.CharField(max_length=50, validators=[RegexValidator(regex=r'^[-a-zA-Z0-9]*$')])
    default = models.BooleanField()
    entity = models.ForeignKey(Entity)

Admin
class GroupInline(admin.TabularInline):
    form = GroupInLineForm
    model = Group
    extra = 0

class EntityAdmin(admin.ModelAdmin):
    inlines = [StaffMemberInline, GroupInline]

Quand je consulte Une Entity, il m'affiche bien les groupes de cette entité mais il me les met dans un champ Texte standard et moi je voudrais qu'il me les affiche dans une liste déroulante. Et en mettant celui qui est sélectionné.

Je ne sais pas si je suis trés claire ???

Hors ligne

#4 23-06-2011 15:32:55

Florian Strzelecki
Membre
Inscription : 11-08-2010
Messages : 40

Re : Interface admin

Hm... il doit y avoir un problème de conception quelque part.

Ce que tu veux, toi, c'est la liste des objets "Group" associés à une
"Entity", si j'ai bien compris.
Le principe avec une ForeignKey de la sorte, c'est de pouvoir modifier
directement les objets "Group" dans le formulaire d'admin d'un objet
"Entity".

Avec une TabularInline, tu affiches donc un formulaire de modification d'un
objet "Group". Donc en théorie, sans mettre ton "GroupInLineForm", tu dois
avoir une ligne / groupe qui te donne deux champs : "name" (un champ texte)
et "default" (une case à cocher).

Si tu veux que, dans ton formulaire d'édition d'une "Entity", tu ais une
liste déroulante des groupes, il te faudrait utiliser un champ "ManyToMany"
dans ton modèle Entity, ce qui serait un brin différent (puisqu'un groupe
pourrait alors appartenir à plusieurs "Entity").

Du côté de l'admin de "Group", par contre, avec la foreign key actuelle, tu
devrais avoir un champ "select" avec la liste des "Entity" disponible, avec
le choix actuel sélectionné.

Est-ce plus clair ? Il y a-t-il autre chose ?

2011/6/23 galbourn <valerie.ouarnier _AT_ inria.fr>

> Models
> class Entity(models.Model):
>    research_center = models.ForeignKey(ResearchCenter)
>    structure = models.ForeignKey(Structure)
>    id_gef = models.PositiveIntegerField(null=True, blank=True)
> class Group(models.Model):
>    name = models.CharField(max_length=50,
> validators=[RegexValidator(regex=r'^[-a-zA-Z0-9]*$')])
>    default = models.BooleanField()
>    entity = models.ForeignKey(Entity)
>
> Admin
> class GroupInline(admin.TabularInline):
>    form = GroupInLineForm
>    model = Group
>    extra = 0
>
> class EntityAdmin(admin.ModelAdmin):
>    inlines = [StaffMemberInline, GroupInline]
>
> Quand je consulte Une Entity, il m'affiche bien les groupes de cette
> entité mais il me les met dans un champ Texte standard et moi je voudrais
> qu'il me les affiche dans une liste déroulante. Et en mettant celui qui
> est sélectionné.
>
> Je ne sais pas si je suis trés claire ???
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#5 23-06-2011 15:56:13

galbourn
Membre
Inscription : 04-03-2011
Messages : 6

Re : Interface admin

Ce que tu veux, toi, c'est la liste des objets "Group" associés à une
"Entity", si j'ai bien compris => oui

Avec une TabularInline, tu affiches donc un formulaire de modification d'un
objet "Group". Donc en théorie, sans mettre ton "GroupInLineForm", tu dois
avoir une ligne / groupe qui te donne deux champs : "name" (un champ texte)
et "default" (une case à cocher). => oui

Si tu veux que, dans ton formulaire d'édition d'une "Entity", tu ais une
liste déroulante des groupes, il te faudrait utiliser un champ "ManyToMany"
dans ton modèle Entity, ce qui serait un brin différent (puisqu'un groupe
pourrait alors appartenir à plusieurs "Entity").=> non
Un groupe ne peut appartenir qu'à une entity
par contre une Entity peut contenir plusieurs groupes

ce que je veux c'est qu'il m'affiche ligne par ligne comme il fait aujourd'hui mais dans un SELECT pré sélectionné au lieu de zone de texte ?

Et quand je clique sur l'ajout d'un groupe supplémentaire, qu'il me mette dans une liste déroulante toutes les valeurs possibles.

Hors ligne

#6 23-06-2011 16:44:31

Florian Strzelecki
Membre
Inscription : 11-08-2010
Messages : 40

Re : Interface admin

Yep, et ce comportement tu ne l'as pas avec une Admin Inline, puisque le
principe c'est d'afficher un formulaire différent / objet liée. Donc le
"select" est, dans ton cas, impossible à réaliser avec une Admin Inline (si
je ne dis pas de connerie...).

Il serait peut-être plus intéressant pour toi alors de regarder à créer un
formulaire d'Admin pour ton objet Entity. Mais là, c'est une autre paire de
manche, et je manque un peu d'expérience là dessus.

Bref bon courage, et si quelqu'un d'autre à une idée qu'il se dénonce. :-)

Le 23 juin 2011 16:56, galbourn <valerie.ouarnier _AT_ inria.fr> a écrit :

> Ce que tu veux, toi, c'est la liste des objets "Group" associés à une
> "Entity", si j'ai bien compris => oui
>
> Avec une TabularInline, tu affiches donc un formulaire de modification
> d'un
> objet "Group". Donc en théorie, sans mettre ton "GroupInLineForm", tu
> dois
> avoir une ligne / groupe qui te donne deux champs : "name" (un champ
> texte)
> et "default" (une case à cocher). => oui
>
> Si tu veux que, dans ton formulaire d'édition d'une "Entity", tu ais une
> liste déroulante des groupes, il te faudrait utiliser un champ
> "ManyToMany"
> dans ton modèle Entity, ce qui serait un brin différent (puisqu'un
> groupe
> pourrait alors appartenir à plusieurs "Entity").=> non
> Un groupe ne peut appartenir qu'à une entity
> par contre une Entity peut contenir plusieurs groupes
>
> ce que je veux c'est qu'il m'affiche ligne par ligne comme il fait
> aujourd'hui mais dans un SELECT pré sélectionné au lieu de zone de texte
> ?
>
> Et quand je clique sur l'ajout d'un groupe supplémentaire, qu'il me mette
> dans une liste déroulante toutes les valeurs possibles.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

Pied de page des forums