Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 从CreateView返回';s form_valid()而不保存实例_Django_Django Generic Views - Fatal编程技术网

Django 从CreateView返回';s form_valid()而不保存实例

Django 从CreateView返回';s form_valid()而不保存实例,django,django-generic-views,Django,Django Generic Views,在处理表单提交时,我必须执行自定义逻辑(联系web服务等)。如果失败,我想阻止创建一个新的汽车模型实例 让我们通过一个简单的片段来演示: from django.views import generic from django.http import HttpResponseRedirect class CarCreateView(generic.edit.CreateView): model = Car form_class = CarForm def

在处理表单提交时,我必须执行自定义逻辑(联系web服务等)。如果失败,我想阻止创建一个新的汽车模型实例

让我们通过一个简单的片段来演示:

from django.views import generic
from django.http import HttpResponseRedirect

class CarCreateView(generic.edit.CreateView):
      model = Car
      form_class = CarForm

      def form_valid(self, form):

           # some logic that may succeed or fail

           if success:
               messages.success(self.request, 'bla bla') 
               return super().form_valid(form)
           else:
               messages.error(self.request, 'blabla')
               # How to return to form index without saving???
               return HttpResponseRedirect(self.get_success_url())

没有调用
super()。form\u valid(form)
是不够的。一辆新车仍在抢救中。有什么想法吗?

事实上我一直都错了。愚蠢的错误。当我保存新实例时,执行从未达到这一点

from django.views.generic import CreateView
from django.http import HttpResponseRedirect

class CarCreateView(CreateView):
      model = Car
      form_class = CarForm

      def form_valid(self, form):

           # some logic that may succeed or fail

           if success:
               messages.success(self.request, 'bla bla') 
               return super(CarCreateView, self).form_valid(form)
           else:
               messages.error(self.request, 'blabla')
               return super(CarCreateView, self).form_invalid(form)
对于任何研究同一问题的人来说,处理这一问题的更干净的方法似乎是

返回self.render\u to\u响应(self.get\u context\u data(form=form))

因此,代码如下所示:

from django.views.generic import CreateView
from django.http import HttpResponseRedirect

class CarCreateView(CreateView):
      model = Car
      form_class = CarForm

      def form_valid(self, form):

           # some logic that may succeed or fail

           if success:
               messages.success(self.request, 'bla bla') 
               return super(CarCreateView, self).form_valid(form)
           else:
               messages.error(self.request, 'blabla')
               return self.render_to_response(self.get_context_data(form=form))

这样,我们返回相同的表单页面,而不创建新实例。

实际上我一直都错了。愚蠢的错误。当我保存新实例时,执行从未达到这一点

对于任何研究同一问题的人来说,处理这一问题的更干净的方法似乎是

返回self.render\u to\u响应(self.get\u context\u data(form=form))

因此,代码如下所示:

from django.views.generic import CreateView
from django.http import HttpResponseRedirect

class CarCreateView(CreateView):
      model = Car
      form_class = CarForm

      def form_valid(self, form):

           # some logic that may succeed or fail

           if success:
               messages.success(self.request, 'bla bla') 
               return super(CarCreateView, self).form_valid(form)
           else:
               messages.error(self.request, 'blabla')
               return self.render_to_response(self.get_context_data(form=form))

这样,我们返回相同的表单页面,而不创建新实例。

no
form\u invalid
负责处理表单处理过程中的错误,而不是之后的错误。事实上,据我所知,一个人不应该在他的
form\u valid()
方法中调用
super()
form\u invalid
负责处理表单处理过程中的错误,而不是之后的错误。事实上,据我所知,一个人不应该在他的
form\u valid()
方法中调用
super()