2010-12-28 5 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 (..., '...')은 여전히 ​​정상적인 메시지 인 것처럼 계속 표시됩니다. 예외 오류가 발생하는 것처럼 RED로 만드는 방법이 있습니까? – chiurox

+0

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

관련 문제