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 :

Rajouter une action dans l'interface admin


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 Web
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Par défaut Rajouter une action dans l'interface admin
    Bonjour,

    Je développe un petit site web avec Django 1.4.3 .

    J'aimerais qu'une action s'applique a plusieurs modèles de l'admin, donc j'ai voulu faire ça :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def mon_action(modeladmin, request, queryset):
        mon code ici
     
    class TotoAdmin(admin.ModelAdmin):
        actions = ('mon_action',)
     
    class TutuAdmin(admin.ModelAdmin):
        actions = ('mon_action',)
    Mais mon action n'apparait alors pas dans la liste déroulante des actions de l'interface d'administration.
    Par contre, ça marche si je réécris mon action dans tous mes modèles de l'admin, ou encore si je fais ça :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def mon_action(modeladmin, request, queryset):
        mon code ici
     
    class TotoAdmin(admin.ModelAdmin):
        actions = ('mon_action_dans_Toto',)
     
        def mon_action_dans_Toto(self, request, queryset):
            mon_action(self, request, queryset)
    Pourtant la doc me dit que la première façon de faire est la bonne., donc comment faire ça proprement et correctement ?

  2. #2
    Membre actif Avatar de Atem18
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2012
    Messages : 91
    Par défaut
    Bien le bonsoir à toi. J'ai testé et le code de la doc fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from django.contrib import admin
    from myapp.models import Article
     
    def make_published(modeladmin, request, queryset):
        queryset.update(status='p')
    make_published.short_description = "Mark selected stories as published"
     
    class ArticleAdmin(admin.ModelAdmin):
        list_display = ['title', 'status']
        ordering = ['title']
        actions = [make_published]
     
    admin.site.register(Article, ArticleAdmin)
    J'ai mis la fonction avant les deux classes à administrer et j'ai rajouté
    actions = [make_published]
    comme attribut à la classe.
    Un exemple chez moi est ceci :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    from django.contrib import admin
    from django.utils.translation import ugettext_lazy as _
    from modeltranslation.admin import TranslationAdmin
    from models import Category
    from models import Project
     
     
    def make_published(modeladmin, request, queryset):
        queryset.update(status='p')
    make_published.short_description = "Mark selected stories as published"
     
     
    class CategoryAdmin(TranslationAdmin):
        """
        Administration interface options of ``Category`` model.
        """
        list_display = ('name', 'slug')
        search_fields = ('name', 'slug')
        save_on_top = True
        actions = [make_published]
     
        class Media:
            js = (
                'modeltranslation/js/force_jquery.js',
                'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery-ui.min.js',
                'modeltranslation/js/tabbed_translation_fields.js',
            )
            css = {
                'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
            }
     
     
    class ProjectAdmin(TranslationAdmin):
        """
        Administration interface options of ``Project`` model.
        """
        list_display = ('title', 'subtitle', 'category')
        search_fields = ('title', 'subtitle', 'slug')
        fieldsets = (
            (_('Headline'), {'fields': ('title', 'subtitle', 'slug', 'category', 'status', 'url')}),
        )
        save_on_top = True
        radio_fields = {'status': admin.VERTICAL, 'url': admin.VERTICAL, }
        actions = [make_published]
     
        class Media:
            js = (
                'modeltranslation/js/force_jquery.js',
                'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery-ui.min.js',
                'modeltranslation/js/tabbed_translation_fields.js',
            )
            css = {
                'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
            }
     
    # let's add it to this model
    admin.site.register(Project, ProjectAdmin)
    admin.site.register(Category, CategoryAdmin)

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Par défaut
    Je me doute bien que c'est moi qui déconne quelque part, mais je ne vois malheureusement toujours pas mon erreur.
    Voici le code :
    Code python : 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
     
    # -*- coding: utf-8 -*-
    from django.contrib import admin, messages
    from volunteer.models import Volunteer
     
    def get_email(modeladmin, request, queryset):
        not_empty_emails = 0
        mailto = "<a href=\"mailto:"
        for item in queryset :
            if (item.email != "") :
                mailto += item.email + ","
                not_empty_emails += 1
        if(not_empty_emails > 0) :
            mailto = mailto[0:mailto.__len__() - 1]
            mailto += "\">mailto the selected list</a>"
            messages.add_message(request, messages.INFO, mailto, extra_tags='safe')
        else :
            messages.add_message(request, messages.INFO, "No items in your selected list have email")
    get_email.short_description = "Send email to the selected list."
     
     
    class VolunteerAdmin(admin.ModelAdmin):
        list_display = ('firstname', 'lastname', 'get_formations', 'get_activities', 'get_functions', 'get_association_origin',)
        search_fields = ('firstname', 'lastname', 'formations__name', 'activities__name', 'functions__function_name', 'association_origin__name',)
        actions = ('get_email',)
     
    admin.site.register(Volunteer, VolunteerAdmin)

  4. #4
    Membre actif Avatar de Atem18
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2012
    Messages : 91
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actions = [get_email, les_autres_fonctions_que_tu_veux_séparées_par_une_virgule]
    Tu n'as pas compris la logique, je pense. Lorsque tu attribue une valeur à la variable actions, toi tu lui envoie une string avec la valeur ('get_email'). Les parenthèses n'ont d'ailleurs rien à faire ici, puisque l'on ne travaille pas avec un tuple.
    Donc, tu ne veux pas lui attribuer une string à ta variable actions, mais bel et bien une liste, ou un tableau dans d'autres langages, de une ou plusieurs fonctions. Il faut donc mettre le nom de la fonction, comme tu mettrais le nom d'une variable pour remplacer un texte. Si tu veux en mettre plusieurs, ben comme c'est une liste, tu les mets les unes après les autres, toujours séparées par une virgule.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 18
    Par défaut
    En effet.
    Merci pour l'explication.

  6. #6
    Membre actif Avatar de Atem18
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2012
    Messages : 91
    Par défaut
    Citation Envoyé par flip_ Voir le message
    En effet.
    Merci pour l'explication.
    De rien. heureux d'avoir été utile. Django vaincra ! ^^

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

Discussions similaires

  1. [Struts] Appel d'une action dans une action
    Par cosmos38240 dans le forum Struts 1
    Réponses: 2
    Dernier message: 16/02/2006, 15h52
  2. Confirmer une action dans un lien PHP
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 11/10/2005, 19h29
  3. Réponses: 4
    Dernier message: 16/09/2005, 15h38
  4. [iText] Rajouter une image dans un pdf
    Par COCOLOLO dans le forum Documents
    Réponses: 2
    Dernier message: 06/04/2005, 17h01

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