【问题标题】:Django FormView: distinguishing between create and updateDjango FormView:区分创建和更新
【发布时间】:2013-07-19 22:01:33
【问题描述】:

我有一个自定义 FormView 类的 mixin,如果保存成功,它只会添加一条成功消息,所以:

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方法中区分创建/更新?

【问题讨论】:

    标签: django django-generic-views


    【解决方案1】:

    一种解决方案是在你的 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
    

    【讨论】:

    • 也可以在任何地方使用 self.object 来代替 form.instance,前提是先调用父 form_valid(如上例)
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2014-03-03
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多