2010-12-28 20 views
5

ogni volta che si salva un modello nell'interfaccia di amministrazione, viene visualizzato il solito "messaggio salvato correttamente". Tuttavia, voglio sapere se è possibile personalizzare questo messaggio perché ho una situazione in cui voglio che avvisi l'utente su ciò che ha appena salvato e le implicazioni di queste azioni.Django: personalizzazione del messaggio dopo il salvataggio di un modulo

class PlanInlineFormset(forms.models.BaseInlineFormset): 
    def clean(self): 
     ### How can I detect the changes? 
     ### (self.changed_data doesn't work because it's an inline) 
     ### and display what he/she just changed at the top AFTER the successful save? 

class PlanInline(admin.TabularInline): 
    model = Plan 
    formset = PlanInlineFormset 

risposta

6

Django (> versione 1.2) utilizza il quadro messaggi per i messaggi di admin. È possibile aggiungere ulteriori messaggi utilizzando tale interfaccia. Ecco un esempio:

from django.contrib import messages 

class SomeModelAdmin(admin.ModelAdmin): 
    # your normal ModelAdmin stuff goes here 

    def save_model(self, request, obj, form, change): 
     # add an additional message 
     messages.info(request, "Extra message here.") 
     super(SomeModelAdmin, self).save_model(request, obj, form, change) 

per rilevare le modifiche apportate all'oggetto di essere salvato, si dovrebbe essere di ignorare il save_model method di ModelAdmin, e confrontare l'oggetto del metodo viene passato alla versione attualmente nel database. Per fare ciò nel caso di inline, è possibile sovrascrivere lo save_formset method. Potrebbe apparire un possibile approccio (codice non testato):

class SomeModelAdmin(admin.ModelAdmin): 
    # your normal ModelAdmin stuff goes here 

    def save_formset(self, request, form, formset, change): 
     if not change: 
      formset.save() 
     else: 
      instances = formset.save(commit=False) 

      for instance in instances: 
       try: 
        # if you've got multiple types of inlines 
        # make sure your fetching from the 
        # appropriate model type here 
        old_object = SomeOtherModel.get(id=instance.id) 
       except SomeOtherModel.DoesNotExist: 
        continue 

       if instance.field_x != old_object.field_x: 
        messages.info(request, "Something Changed") 

      instance.save() 

     formset.save_m2m() 
+0

Solo una breve domanda, message.warning (..., '...') viene comunque visualizzata come se fosse ancora un normale messaggio di successo. C'è un modo per renderlo ROSSO come si sta sollevando un errore di eccezione? – chiurox

+0

try message.error ('', '') – zlosim

Problemi correlati