2010-12-28 6 views
5

管理インターフェースでモデルを保存するたびに、通常の「正常に保存されたメッセージ」が表示されます。 しかし、私はに、に彼が今保存した内容とこれらの動作の意味を警告したい状況があるので、このメッセージをカスタマイズすることができるかどうかを知りたいと思います。Django:フォームが正常に保存された後にメッセージをカスタマイズする

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 

答えて

6

ジャンゴ(>バージョン1.2)は、管理メッセージのメッセージフレームワークを使用しています。そのインタフェースを使用してメッセージを追加できます。ここでは例です:

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) 

保存されているオブジェクトへの変更を検出するには、この方法は、現在のデータベース内のバージョンに渡されるModelAdminののsave_model methodをオーバーライドして、オブジェクトを比較するべきです。インラインの場合にこれを行うには、save_formset methodを上書きできます。それはまだ正常な成功のメッセージだかのように、まだ表示さ

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

だけで簡単な質問、message.warning(...、「...」):可能なアプローチは、(未テストコード)のようになります。それは例外エラーを起こしているようにそれを赤にする方法はありますか? – chiurox

+0

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

関連する問題