2010-09-14 7 views
10

Quiero mostrar un mensaje a los administradores después de que guarden un modelo en particular, algo así como "Ahora habilite la serie".¿Cómo mostrar un mensaje a un administrador de django después de guardar un modelo?

Puedo ver cómo haría esto si fuera una acción de lista (message_user) pero no puedo ver cómo hacerlo desde el formulario principal de CRUD.

¿Alguien sabe cómo?

Gracias

+0

Tenía un mensaje cuando un usuario guardaba una entrada en el administrador (fondo amarillo en la parte superior de la página), pero de alguna manera desaparecía. ¿Cómo lo recupero? Ahora solo recibo un mensaje cuando un usuario hace un error – Timo

Respuesta

24

Pregunta anterior, pero vale la pena al menos un pequeño ejemplo, ya que creo que este es un problema bastante común.

@Davor Lucic señaló la solución correcta. A partir de hoy, Django se envía con un genial message framework que ayuda mucho en esto.

lo tanto, que usted quiere dar aviso dentro de la administración de Django cuando un objeto coche dentro de su modelo de coche cambia de propietario, usted podría hacer algo así:

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) 

vale la pena mencionar que si desea incluir las etiquetas HTML en su mensaje, hay que añadir:

from django.utils.safestring import mark_safe 

que permiten s que usted pueda hacer algo como:

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

No hay necesidad de decir que es mejor que estar seguro de que el código va a añadir es realmente seguro.

Nada excepcional, pero tal vez (y afortunadamente) alguien lo encontrará útil.

+2

En lugar de 'mark_safe', use el [' format_html'] (https://docs.djangoproject.com/en/dev/ref/utils/#module-django. utils.html) ('de django.utils.html import format_html'). –

+0

Esto funciona para mí, pero el problema es que también veo el mensaje incorporado, solo quiero devolver el mensaje de error, pero muestra tanto el mensaje de error como el de éxito. El mensaje de éxito proviene de django. Intenté regresar cuando veo un error pero todavía veo los dos mensajes. –

Cuestiones relacionadas