Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

#1 16-03-2011 11:10:02

Yves Bourhis
Membre
Inscription : 18-01-2011
Messages : 26

Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

Bonjour,

je voudrais savoir s'il est possible de faire apparaître 2 pages différentes pour la même table dans le site d'administration ?

Par exemple la table ressemblerait à quelque chose comme ça :

class MaTable(models.Model):
     numero = models.AutoField(primary_key=True)
     nom = models.CharField('Nom courant',  max_length=30)
     champ10 = models.CharField(max_length=30, blank=True)
     champ11 = models.CharField(max_length=30, blank=True)
     [...]
     champ19 = models.CharField(max_length=30, blank=True)
     champ20 = models.CharField(max_length=30, blank=True)
     champ21 = models.CharField(max_length=30, blank=True)
     [...]
     champ29 = models.CharField(max_length=30, blank=True)
     def __unicode__(self):
         return self.nom

Pour laquelle, suivant le cas, on ne voudrait pouvoir afficher que les champs "champ10" à "champ19", où les champs "champ20" à "champ29"...  en définissant 2 modèles d'administration distincts :

class MaTableAdmin(admin.ModelAdmin):
     list_display = ['nom',  'champ10', ..., 'champ19']
     list_editable = ['champ10', 'champ15, 'champ19']
     ordering = ['nom']
et  :
class MaTableBisAdmin(admin.ModelAdmin):
     list_display = ['nom',  'champ20', ..., 'champ29']
     list_editable = ['champ21', 'champ22, 'champ24, 'champ28']
     ordering = ['nom']

mais je ne peux pas "doubler" la commande "admin.site.register()" !

Si quelqu'un a une idée...

Cordialement.

Hors ligne

#2 18-03-2011 10:07:25

Yves Bourhis
Membre
Inscription : 18-01-2011
Messages : 26

Re : Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

Bonjour,

je me réponds à moi-même, car j'ai une solution qui pourrait (presque) me convenir : dans mon cas le fait de devoir afficher l'une ou l'autre des pages d'administration dépend de la période de l'année. Il me suffit donc de faire un test sur la date :

MoisDuJour = time.localtime().tm_mon
MoisDebut = 3 # Avril
MoisFin = 8 # Aout
if ((MoisDuJour >= MoisDebut) and (MoisDuJour <= MoisFin)):
     admin.site.register(MaTable  MaTableAdmin)
else:
     admin.site.register(MaTable,  MaTableBisAdmin)

Du coup j'ai une autre question : est-ce que django effectuera ce test à chaque appel de la page ou me faudra-t-il relancer le serveur aux changements de mois ?

Cordialement.

Le 16/03/2011 11:10, Yves Bourhis a écrit :
> Bonjour,
>
> je voudrais savoir s'il est possible de faire apparaître 2 pages différentes pour la même table dans le site d'administration ?
>
> Par exemple la table ressemblerait à quelque chose comme ça :
>
> class MaTable(models.Model):
> numero = models.AutoField(primary_key=True)
> nom = models.CharField('Nom courant', max_length=30)
> champ10 = models.CharField(max_length=30, blank=True)
> champ11 = models.CharField(max_length=30, blank=True)
> [...]
> champ19 = models.CharField(max_length=30, blank=True)
> champ20 = models.CharField(max_length=30, blank=True)
> champ21 = models.CharField(max_length=30, blank=True)
> [...]
> champ29 = models.CharField(max_length=30, blank=True)
> def __unicode__(self):
> return self.nom
>
> Pour laquelle, suivant le cas, on ne voudrait pouvoir afficher que les champs "champ10" à "champ19", où les champs "champ20" à "champ29"... en définissant 2 modèles d'administration distincts :
>
> class MaTableAdmin(admin.ModelAdmin):
> list_display = ['nom', 'champ10', ..., 'champ19']
> list_editable = ['champ10', 'champ15, 'champ19']
> ordering = ['nom']
> et :
> class MaTableBisAdmin(admin.ModelAdmin):
> list_display = ['nom', 'champ20', ..., 'champ29']
> list_editable = ['champ21', 'champ22, 'champ24, 'champ28']
> ordering = ['nom']
>
> mais je ne peux pas "doubler" la commande "admin.site.register()" !
>
> Si quelqu'un a une idée...
>
> Cordialement.

Hors ligne

#3 18-03-2011 13:26:06

luc
Membre
Lieu : Loire (42)
Inscription : 19-02-2011
Messages : 15
Site Web

Re : Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

Bonjour,

Non ce test ne sera pas effectué pour chaque page. Il faudra donc relancer le serveur.

Quels sont les éléments qui varient entre les deux vues?

Cordialement

Hors ligne

#4 18-03-2011 13:51:56

Yves Bourhis
Membre
Inscription : 18-01-2011
Messages : 26

Re : Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

Le 18/03/2011 13:26, Luc JEAN a écrit :
> Quels sont les éléments qui varient entre les deux vues?

Dans mon cas j'ai 4 colonnes (éditables) qui changent en fonction de la période, ainsi que l'affichage de la fiche correspondante (les champs correspondants sont "collapsés" ou pas).

Hors ligne

#5 18-03-2011 16:24:26

luc
Membre
Lieu : Loire (42)
Inscription : 19-02-2011
Messages : 15
Site Web

Re : Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

Une idée comme ça: Faire cacher les champs qui ne sont pas nécessaire par un bout de javascript. Le fichier javascript étant inclus dans la page par une sous-classe Media. Si besoin, le code js peut même être généré par Django.

Pour intégrer du code js dans une page Admin:

class ArticleAdmin(admin.ModelAdmin):
    class Media:
        js = ("hidefields.js",)

c.f. http://docs.djangoproject.com/en/dev/re … efinitions

Hors ligne

  • Accueil
  • » Django-fr
  • » Admin-site : définir 2 classes "ModelAdmin" sur une même table ?

Pied de page des forums