2013-07-20 28 views
2

我有一個自定義FormView控件類,只是增加了一個成功的消息,如果保存成功一個mixin,所以:Django的FormView控件:區分創建和更新

class MessagesMixin(object): 

    def form_valid(self, form): 
     response = super(MessagesMixin, self).form_valid(form) 
     messages.add_message(self.request, 
          messages.SUCCESS, 
          'Successfully created %s' % form.instance) 
     return response 

正如你所看到的,這隻有真正覆蓋創建。如果實例更新,消息仍然會說「已創建」。有沒有辦法區分form_valid方法中的創建/更新?

回答

4

一個解決方案是將屬性添加到您的mixin,然後將其設置在您的UpdateCreate視圖中。如果你需要動態的東西,你可以定義一個靜態屬性或者重載get_form_valid_msg。未經測試的代碼:

from django.core.exceptions import ImproperlyConfigured 

class MessagesMixin(object): 
    @property 
    def form_valid_msg(self): 
     raise ImproperlyConfigured("you're missing the 'form_valid_msg' property") 

    def get_form_valid_msg(self): 
     return self.form_valid_msg 

    def form_valid(self, form): 
     response = super(MessagesMixin, self).form_valid(form) 

     msg = 'Successfully {form_valid_msg} {form}'.format(
      form_valid_msg=self.get_form_valid_msg(), 
      form=form.instance 
     ) 

     messages.success(self.request, msg) 

     return response 
+1

而不是form.instance,你可以在任何地方使用self.object,只要你先調用父窗體form_valid(就像上面的例子) – mariodev