Vous n'êtes pas identifié(e).
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
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
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
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
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",)
Hors ligne