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 :

Multiples listes pour le même modèle (dans l'administration) [Python 3.X]


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 12
    Par défaut Multiples listes pour le même modèle (dans l'administration)
    Bonjour,

    Je cherche à afficher plusieurs listes dans la navbar à gauche à partir du même modèle MAIS avec un nom d'affichage du lien différent et une query_set différente.
    A ce que j'ai compris je dois utiliser une classe proxy pour surcharger ma classe mais cela ne fonctionne pas (je dois mal m'y prendre)

    model.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    class CategoriePhoto(models.Model):
        class Meta:
            verbose_name_plural = "catégories de photo"
            verbose_name = "une catégorie de photo"
     
        nom = models.CharField(max_length=30)
        corporate = models.BooleanField()
     
        def __str__(self):
            """retourne un object lisible"""
            return self.nom
     
        @admin.display(
            description='Nombre de photos',
        )
        def how_many_photo(self):
            # ici je récupère le nombre de photo pour la catégorie en cours
            return Photo.objects.filter(categorie__photo=self.pk).count()
     
     
    class Photo(models.Model):
     
        nom = models.CharField(max_length=30)
        categorie = models.ForeignKey(CategoriePhoto, on_delete=models.CASCADE, null=True, blank=True)
        fichier = models.ImageField(upload_to='images_prestations/', verbose_name='photo')
        mariage = models.BooleanField()
     
        def __str__(self):
            """retourne un object lisible"""
            return self.nom
     
     
    class PhotoMariage(Photo):
        class Meta:
            proxy = True
            verbose_name = "photo de mariage"
            # verbose_name_plural = "photos de mariage"
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class PhotoAdmin(admin.ModelAdmin):
     
        def changelist_view(self, request, extra_context=None):
            extra_context = {'title': 'Sélectionnez la photo à changer'}
            return super(PhotoAdmin, self).changelist_view(request, extra_context=extra_context)
     
        def add_view(self, request, object_id=None, form_url='', extra_context=None):
            extra_context = {'title': 'Ajout d\'une photo'}
            return super().add_view(request, extra_context=extra_context)
     
        def change_view(self, request, object_id, form_url='', extra_context=None):
            extra_context = {'title': 'Modification d\'une photo'}
            return super().change_view(request, object_id, form_url, extra_context=extra_context)
     
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            return qs.filter(mariage=False)
     
     
    class PhotoMariageAdmin(admin.ModelAdmin):
     
        def changelist_view(self, request, extra_context=None):
            extra_context = {'title': 'Sélectionnez la photo de mariage à changer'}
            return super(PhotoMariageAdmin, self).changelist_view(request, extra_context=extra_context)
     
        def add_view(self, request, object_id=None, form_url='', extra_context=None):
            extra_context = {'title': 'Ajout d\'une photo de mariage'}
            return super().add_view(request, extra_context=extra_context)
     
        def change_view(self, request, object_id, form_url='', extra_context=None):
            extra_context = {'title': 'Modification d\'une photo de mariage'}
            return super().change_view(request, object_id, form_url, extra_context=extra_context)
     
        # j'utilise get_queryset pour modifier ce qui est affiché dans la liste,
        # ici je n'affiche que les photos de mariage
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            return qs.filter(mariage=True)
     
     
    admin.site.register(Photo, PhotoAdmin)
    admin.site.register(PhotoMariage, PhotoMariageAdmin)
    Seul la ligne suivant à un effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    admin.site.register(Photo, PhotoAdmin)
    Je n'arrive donc pas à afficher plusieurs fois la liste de photo à l'aide des classes proxy contrairement à ce que j'ai pu lire sur d'autres forum (rien trouvé dans la doc, ou pas su où chercher exactement)

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 12
    Par défaut Solution !
    J'ai refait ce genre de montage en simplifié dans un nouveau projet, cela à fonctionné et c'est bien la bonne méthode pour le faire.

    Je suis donc revenu sur mon projet et ..... cela a aussi fonctionné

    Le problème était simplement que j'effectuais mes tests en étant connecté à l'administration avec un utilisateur qui n'avait pas la permission de voir ma nouvelle classe proxy.
    Il faut donc bien penser à donner les bonnes permissions aux utilisateurs concernés !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/01/2019, 17h41
  2. Paramètre get dans l'url => multiples valeurs pour une même colonne
    Par SpaceFrog dans le forum Développement Sharepoint
    Réponses: 0
    Dernier message: 22/06/2018, 14h49
  3. Réponses: 4
    Dernier message: 08/11/2008, 15h05
  4. [MySQL] Multiples enregistrements pour un même champs
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/03/2008, 20h09
  5. Réponses: 2
    Dernier message: 21/10/2006, 17h27

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