2010-12-28 13 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

Django (> संस्करण 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

बस एक त्वरित प्रश्न, संदेश। चेतावनी (..., '...') अभी भी प्रदर्शित होता है जैसे कि यह अभी भी एक सामान्य सफल संदेश है। क्या इसे लाल बनाने की कोई तरीका है जैसे कि यह अपवाद त्रुटि उठा रहा है? – chiurox

+0

संदेश का प्रयास करें। आतंक ('', '') – zlosim

संबंधित मुद्दे