2010-09-14 8 views
10

Je veux afficher un message aux administrateurs après avoir sauvegardé un modèle particulier, quelque chose comme "Maintenant activer la série".Comment afficher un message à un administrateur django après avoir enregistré un modèle?

Je peux voir comment je ferais ceci s'il s'agissait d'une action de liste (message_user) mais je ne vois pas comment faire cela à partir du formulaire CRUD principal.

Est-ce que quelqu'un sait comment?

Merci

+0

J'avais un message quand un utilisateur sauvegardait une entrée à l'admin (fond jaune en haut de la page), mais en quelque sorte il a disparu. Comment est-ce que je le récupère? Maintenant, je reçois seulement un message quand un utilisateur a fait une erreur – Timo

Répondre

24

Vieille question, mais vaut au moins un petit exemple car je pense que c'est un problème assez commun.

@Davor Lucic a indiqué la bonne solution. A partir d'aujourd'hui, Django est livré avec un message framework cool qui aide beaucoup dans ce domaine.

Alors, que vous voulez donner un avis dans le Django d'administration chaque fois qu'un objet de voiture au sein de votre modèle de voiture change de propriétaire, vous pourriez faire quelque chose comme ça:

admin.py

from django.contrib import admin 
from django.contrib import messages 

from .models import Car 


@admin.register(Car) 
class CarAdmin(admin.ModelAdmin): 
    list_display = ('owner', 'color', 'status', 'max_speed',) 

    def save_model(self, request, obj, form, change): 
     if 'owner' in form.changed_data: 
      messages.add_message(request, messages.INFO, 'Car has been sold') 
     super(CarAdmin, self).save_model(request, obj, form, change) 

Il est à noter que si vous souhaitez inclure des balises HTML dans votre message, vous devez ajouter:

from django.utils.safestring import mark_safe 

qui permettent s vous de faire quelque chose comme:

messages.add_message(request, messages.INFO, mark_safe("Please see <a href='/destination'>here</a> for further details")) 

Pas besoin de dire que vous feriez mieux d'être sûr que le code que vous ajoutez est vraiment sûr.

Rien d'exceptionnel, mais peut-être (et j'espère) quelqu'un le trouvera utile.

+2

Au lieu de 'mark_safe', utilisez le [' format_html'] (https://docs.djangoproject.com/en/dev/ref/utils/#module-django. utils.html) ('depuis django.utils.html import format_html'). –

+0

Cela fonctionne pour moi mais le problème est que je vois le message intégré aussi, je veux retourner le message d'erreur seulement mais il montre à la fois le message d'erreur et de succès. Le message de réussite vient de django. J'ai essayé de revenir quand j'ai vu une erreur mais je vois toujours les deux messages. –

Questions connexes