ste*_*ios 1 django django-generic-views
在处理表单提交时,我必须执行自定义逻辑(联系 Web 服务等)。如果失败,我想阻止创建模型 Car 的新实例。
让我们通过一个简单的片段来演示:
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())
Run Code Online (Sandbox Code Playgroud)
不打电话super().form_valid(form)是不够的。一辆新车仍在保存中。有任何想法吗?
其实我一直都错了。愚蠢的错误。当我保存新实例时,执行从未达到那个点。
对于任何研究同一问题的人来说,处理这个问题的更简洁的方法似乎是
return self.render_to_response(self.get_context_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))
Run Code Online (Sandbox Code Playgroud)
这样我们返回相同的表单页面,而无需创建新实例。
| 归档时间: |
|
| 查看次数: |
2591 次 |
| 最近记录: |