2013-07-20 30 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