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 :

Restreindre les actions qu'un super utilisateur peut effectuer dans l'administration de Django


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Par défaut Restreindre les actions qu'un super utilisateur peut effectuer dans l'administration de Django
    Bonjour, je lis actuellement un chapitre qui explique comment restreindre les actions qu'un super utilisateur peut effectuer dans l'interface d'administration de Django :

    «
    Interdiction d'ajouter de nouveaux items

    Le disquaire a décidé qu'il ne voulait pas ajouter de réservations par lui-même. Il préfère que les réservations figurant dans la base de données ne concernent que celles effectuées sur internet.

    Le client étant roi, exaucez son souhait en utilisant la méthode has_add_permission :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @admin.register(Booking)
    class BookingAdmin(admin.ModelAdmin):
        # ...
        def has_add_permission(self, request):
            return False
     
    class BookingInline(admin.TabularInline):
        # ...
        def has_add_permission(self, request):
            return False
    »

    Le problème c'est que cela me renvoie une erreur : « has_add_permission() takes 2 positional arguments but 3 were given »

    Le cours que je lis concerne une ancienne version de Django et malgré mes recherches, je n'ai toujours pas trouvé (ou compris) comment faire cela sur la version 3.0 de Django.

    Pouvez-vous m'aider svp ?

    Je vous remercie,

    Sinouhé

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Par défaut
    Bon j'ai trouvé une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @admin.register(Booking)
    class BookingAdmin(admin.ModelAdmin):
        # ...
        def has_add_permission(self, request):
            return False
    
    class BookingInline(admin.TabularInline):
        # ...
        def has_add_permission(self, request, obj):
            return False
    J'ai rajouté l'argument en rouge qui représente l’objet parent en cours d’édition ou None lors de l’ajout d’un nouveau parent (cependant, il ne faut pas ajouter obj dans le « has_add_permission » de la classe BookingAdmin(admin.ModelAdmin) car obj n'aurait aucun sens ici).

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Par défaut
    Merci pour ton "auto-solution", je rencontrais le même problème.

    Par contre, je ne trouve pas la solution logique par rapport au message d'erreur.

    Quand on appelle la méthode avec deux arguments (en comptant le self), on a le message d'erreur qui dit qu'on l'a appelé avec trois arguments alors qu'elle n'en attendait que deux, et quand on l'appelle avec trois arguments, là ça fonctionne.

    C'est pas logique non ? ...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 749
    Par défaut
    Salut,

    Citation Envoyé par Jp20100 Voir le message
    C'est pas logique non ? ...
    Ca a sa logique! Si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            def has_add_permission(self, request)
    on a 2 arguments positionnels.
    Mais si cette méthode va être appelée avec 3 arguments (comme le mentionne la documentation), logique qu'on ait le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    has_add_permission() takes 2 positional arguments but 3 were given »
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Par défaut
    Désolé mais non, le message d'erreur n'est pas logique.

    Quand on lui donne deux arguments (si on compte le self), le message nous dit qu'on lui a donné trois arguments alors qu'il n'en attend que deux.

    Et quand on lui en donne trois (toujours si on compte le self), la méthode fonctionne.

    Au pire, s'il ne considère pas le self comme un réel argument, il devrait dire qu'on ne lui a envoyé qu'un seul argument alors qu'il en attend deux.

    Doc Django ci-dessous :

    InlineModelAdmin.has_add_permission(request, obj)¶
    Doit renvoyer True si l’ajout d’un sous-objet est autorisé, False sinon. obj est l’objet parent en cours d’édition ou None lors de l’ajout d’un nouveau parent.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 749
    Par défaut
    Citation Envoyé par Jp20100 Voir le message
    Désolé mais non, le message d'erreur n'est pas logique.

    Quand on lui donne deux arguments (si on compte le self), le message nous dit qu'on lui a donné trois arguments alors qu'il n'en attend que deux.
    Il faut toujours compter le "self" car, lorsqu'elle est appelée, une méthode reste une fonction appelée avec "self" en premier argument.

    Après il ne faut pas confondre le nombre d'arguments dans la déclaration de la fonction (ce qu'elle attend) avec ceux passés lors de l'appel. Si çà ne matche pas, çà plante.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> def f(a, b): pass
    ...
    >>> f(1, 2, 3)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f() takes 2 positional arguments but 3 were given
    >>> f(1)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f() missing 1 required positional argument: 'b'
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Un logiciel libre peut-il restreindre les tâches que ses utilisateurs peuvent effectuer avec son aide ?
    Par Stéphane le calme dans le forum Logiciels Libres & Open Source
    Réponses: 4
    Dernier message: 23/09/2018, 01h39
  2. Réponses: 1
    Dernier message: 18/02/2013, 09h04
  3. Réponses: 2
    Dernier message: 28/09/2011, 16h15
  4. Tracer les actions des utilisateurs
    Par Housssss dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 06/02/2007, 12h21
  5. [XP Pro] Restreindre les droits d'un utilisateur
    Par Cereal123 dans le forum Sécurité
    Réponses: 5
    Dernier message: 12/10/2005, 14h57

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