IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

utiliser return upper dans admin.py


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut utiliser return upper dans admin.py
    Bonjour,
    je cherche à modifier mon fichier admin.py de mon application ordis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    from ordis.models import Ordi, Maintenance, OperatingSystem
    from django.contrib import admin
     
    #class MaintenanceAdmin(admin.ModelAdmin): 
        #list_display = (???) here I would like to see my Computer id, and the OS installed on it
     
    def renvoi_os(Ordi):
        #return ("%d" % (Ordi.id)).upper()
        return ("%d %d" % (Ordi.id, Ordi.operatingsystemused)).upper()
    class MaintenanceAdmin(admin.ModelAdmin):
        list_display = (renvoi_os,)
    #class OrdiAdmin(admin.ModelAdmin):
     
     
    admin.site.register(Ordi)
    admin.site.register(Maintenance,MaintenanceAdmin)
    admin.site.register(OperatingSystem)
    Ce admin.py est associé à mon fichier models.py que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    from django.db import models
     
    from django.db.models import (Model, BooleanField,
        CharField, DateTimeField, TextField, URLField,
        EmailField, ManyToManyField, ForeignKey, IntegerField,
        FileField, ImageField)
     
    # Create your models here.
     
    class OperatingSystem (models.Model):
        operatingsystem = CharField (max_length=30, blank=True, null=True)
    class Ordi(models.Model):
        architecture = CharField (max_length=30, blank=True, null=True)
        operatingsystemused = ManyToManyField(OperatingSystem, null=True, blank=True)
    class Maintenance(models.Model):
        ordi=ForeignKey(Ordi, blank=True, null=True)
        action = TextField(null=True, blank=True)
    QUand je n'appelle que l'Ordi.id dans le admin.py (ligne commentée), j'obtiens bien le numéro de l'ordi correspondant dans Maintenance. En revanche, la ligne avec Ordi.id + Ordi.operatingsystemused me renvoie simplement (None).

    Il y a quelquechose que je fais de travers??

    Merci de votre aide.

    Florian

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut simplifier le problème?
    Bonjour,

    Pour avancer sur mon appli, je commence par simplifier le problème...
    Comment faire pour retourner un ManyToMany ,???

    Le modèle suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class OperatingSystem (models.Model):
    	operatingsystem = CharField (max_length=30, blank=True, null=True)
    	def __unicode__(self):
    		return "%s" % (self.operatingsystem)
    class Ordi(models.Model):
    	architecture = CharField (max_length=30, blank=True, null=True)
    	operatingsystemused = ManyToManyField(OperatingSystem, null=True, blank=True)
     
    	def __unicode__(self):
    		oses_installed = u','.join(self.operationsystemused_set.all().values('operatingsystem',flat=True))
    		return ("%s" % (oses_installed)).upper()
    ou avec la dernière ligne return comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return models.join(list(self.operatingsystemused))
    me renvoie (None) ....

    Que faire???

    Merci pour votre aide!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut réponse partielle
    Bonjour,
    j'ai trouvé la solution à la version simplifiée du problème
    Dans le models.py de Ordis, je sors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	def __unicode__(self):
    		oses_installed = u','.join(self.operatingsystemused.all().values_list('operatingsystem', flat=True))
    		return ("%s" % (oses_installed))

    Par contre ça ne fonctionne toujours pas dans le admin.py.
    Le résultat des lignes suivantes est None:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def renvoi_os(maintenance):
        oses_installed = u','.join(maintenance.ordi.operationsystemused_set.all().values_list('operatingsystem',flat=True))
        return ("%s" % (oses_installed))
     
    class MaintenanceAdmin(admin.ModelAdmin):
       list_display = (renvoi_os,)
    Merci pour l'aide apportée.

  4. #4
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Euh tu te rends compte que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("%s" % (oses_installed))
    c'est la même chose que
    et que tu ferais beaucoup mieux de faire simplement :
    Puis tu devrais utiliser ça comme list_display :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list_display = ('ordi_id', renvoi_os)
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut apprendre l'orthographe!
    merci pour les coups de main à l'écriture.

    Par contre, le admin.py de l'appli ordis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from ordis.models import Ordi, Maintenance, OperatingSystem
    from django.contrib import admin
    def renvoi_os(maintenance):
        oses_installed = u','.join(maintenance.ordi.operationsystemused_set.all().values_list('operatingsystem',flat=True))
        return oses_installed
    class MaintenanceAdmin(admin.ModelAdmin):
       list_display = ('ordi_id', renvoi_os)
    me renvoie toujours un beau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaintenanceAdmin.list_display[0], 'ordi_id' is not a callable or an attribute of 'MaintenanceAdmin' or found in the model 'Maintenance'.
    avec une classe Mainteance dans l'appli ordis définie comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Maintenance(models.Model):
    	ordi=ForeignKey(Ordi, blank=True, null=True)
    	action = TextField(null=True, blank=True)

  6. #6
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Ah oui tiens... Il ne veut prendre que les vrais champs. Bon ben ajoute une fonction en plus alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def get_ordi_id(maintenance):
        return maintenance.ordi_id
     
    ...
        list_display = (get_ordi_id, renvoi_os)
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Salut,
    merci pour ta réponse.

    L'ajout d'une fonction get_ordi_id me permet bien d'avoir l'id correspondant à l'ordi lié à la maintenance. Par contre, il ne m'affiche toujours pas les OS liés à l'ordi en question. Dans la colonne renvoi os il m'affiche (None).
    Voici mon admin.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    from ordis.models import Ordi, Maintenance, OperatingSystem
    from django.contrib import admin
     
    def get_ordi_id(maintenance):
        return maintenance.ordi_id
     
    def renvoi_os(maintenance):
        oses_installed = u','.join(maintenance.ordi.operationsystemused_set.all().values_list('operatingsystem',flat=True))
        return ("%s" % (oses_installed))
     
     
    class MaintenanceAdmin(admin.ModelAdmin):
       list_display = (get_ordi_id, renvoi_os,) 
     
    admin.site.register(Ordi)
    admin.site.register(Maintenance,MaintenanceAdmin)
    admin.site.register(OperatingSystem)
    et mon models.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from django.db import models
     
    from django.db.models import (Model, BooleanField,
        CharField, DateTimeField, TextField, URLField,
        EmailField, ManyToManyField, ForeignKey, IntegerField,
        FileField, ImageField)
     
    # Create your models here.
     
    class OperatingSystem (models.Model):
    	operatingsystem = CharField (max_length=30, blank=True, null=True)
    	def __unicode__(self):
    		return "%s" % (self.operatingsystem)
     
    class Ordi(models.Model):
    	architecture = CharField (max_length=30, blank=True, null=True)
    	operatingsystemused = models.ManyToManyField(OperatingSystem, null=True, blank=True)
     
     
    class Maintenance(models.Model):
    	ordi=ForeignKey(Ordi, blank=True, null=True)
    	action = TextField(null=True, blank=True)
    merci de ton aide.

Discussions similaires

  1. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  2. Utilisation fonction définie dans un .Dll
    Par jeab. dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2004, 16h23
  3. Réponses: 3
    Dernier message: 11/03/2004, 10h58
  4. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo