Django 从CreateView返回';s form_valid()而不保存实例
在处理表单提交时,我必须执行自定义逻辑(联系web服务等)。如果失败,我想阻止创建一个新的汽车模型实例 让我们通过一个简单的片段来演示: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
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()