【问题标题】:Does form_valid() in django saves the ModelForm instance by default?django中的form_valid()是否默认保存ModelForm实例?
【发布时间】:2020-01-02 00:31:10
【问题描述】:

官方文档说form_valid() 是在发布有效表单数据时调用的。并且没有说任何关于保存数据的事情。但是我正在读一本书,上面写着

此方法的默认行为是保存实例(例如 modelforms )并将用户重定向到success_url .

所以,我有点困惑。

【问题讨论】:

    标签: django django-class-based-views


    【解决方案1】:

    为此,您需要查看ProcessFormView(由CreateView 子类化)的post 方法的实现:

        def post(self, request, *args, **kwargs):
            """
            Handle POST requests: instantiate a form instance with the passed
            POST variables and then check if it's valid.
            """
            form = self.get_form()
            if form.is_valid():
                return self.form_valid(form)
            else:
                return self.form_invalid(form)
    

    您看到form.is_valid() 方法被调用,如果表单已经过验证,它会返回true。然后你应该检查form_valid() 方法在ModelFormMixin 中是如何工作的。

    def form_valid(self, form):
        """If the form is valid, save the associated model."""
        self.object = form.save()
        return super().form_valid(form)
    

    它很直接,使用form.save() 方法将数据保存到数据库,然后调用super class's form_valid() 方法,在该方法中它重定向到success url

    【讨论】:

      【解决方案2】:

      好吧,我找到了另一个关于编辑 mixins 的文档,它确实说

      保存表单实例,设置视图的当前对象,并重定向到 get_success_url()。

      所以,确实如此。

      【讨论】:

        猜你喜欢
        • 2012-08-31
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 1970-01-01
        • 2020-10-17
        • 2020-06-17
        • 1970-01-01
        相关资源
        最近更新 更多