2010-09-14 11 views
10

Desidero visualizzare un messaggio agli amministratori dopo aver salvato un modello particolare, ad esempio "Abilita ora la serie".Come mostrare un messaggio ad un admin di django dopo aver salvato un modello?

Posso vedere come farei questo se fosse un'azione di lista (message_user) ma non riesco a vedere come farlo dal form CRUD principale.

Qualcuno sa come?

Grazie

+0

Ho ricevuto un messaggio quando un utente ha salvato una voce nell'amministratore (sfondo giallo in cima alla pagina), ma in qualche modo è scomparso. Come posso riaverlo? Ora ricevo un messaggio solo quando un utente ha fatto un errore – Timo

risposta

24

Vecchia domanda, ma vale almeno un piccolo esempio, perché penso che questo sia un problema abbastanza comune.

@Davor Lucic ha indicato la soluzione giusta. Ad oggi, Django offre un ottimo message framework che aiuta molto in questo.

Quindi, diciamo che si vuole dare comunicazione entro il Django Admin ogni volta che un oggetto auto all'interno del tuo modello di auto cambia proprietario, si potrebbe fare qualcosa di simile:

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 ricordare che, se si desidera includere tag HTML nel vostro messaggio, si deve aggiungere:

from django.utils.safestring import mark_safe 

che permettono s di fare qualcosa di simile:

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

Non c'è bisogno di dire che è meglio essere che il codice si sta aggiungendo è davvero sicuro.

Niente di eccezionale, ma forse (e si spera) qualcuno lo troverà utile.

+2

Invece di 'mark_safe', usa [' format_html'] (https://docs.djangoproject.com/en/dev/ref/utils/#module-django. utils.html) ('from django.utils.html import format_html'). –

+0

Questo funziona per me, ma il problema è che vedo anche il messaggio incorporato, voglio restituire solo il messaggio di errore ma mostra sia l'errore che il messaggio di successo. Il messaggio di successo viene dal django. Ho provato a tornare quando vedo l'errore ma vedo ancora entrambi i messaggi. –

Problemi correlati