在 ajax 表单的 Django 通用视图中捕获完整性错误
Catching integrity error in django generic view for ajax forms
在 django CreateView 中,我有两个字段应该是唯一的。
即。说用户和 unique_name
为了捕获完整性错误(当用户有重复项时 unique_name),我在正常的 Django 函数中编写了 try 和 except。它适用于 HTML 表单提交。
但是,当我尝试使用 Ajax 提交表单时,我找不到捕获错误的方法。
class数据创建(AjaxableResponseMixin,CreateView):
型号 = 处方
字段 = ['user','unique_name','x','y','z']
success_url = reverse_lazy('some url')</p>
<pre><code>def form_valid(self, form):
form.instance.user = self.request.user
try:
return super(DataCreate, self).form_valid(form)
except IntegrityError:
form.add_error('unique_name','You already have a user by that name')
return render_to_response('html')
def save(self):
request.session['unique_name'] = self.object.unique_name
super(DataCreate,self).save() </code>
注意:Ajax Mixin 取自 Django Documentation(1.7),如下所示。
class AjaxableResponseMixin(对象):
"""
Mixin 为表单添加 AJAX 支持。
必须与基于对象的 FormView(例如 CreateView)一起使用
"""
def form_invalid(self, form):
response = super(AjaxableResponseMixin, self).form_invalid(表格)
如果 self.request.is_ajax():
returnJsonResponse(form.errors,状态=400)
别的:
return 回应</p>
<pre>def form_valid(self, form):
# We make sure to call the parent's form_valid() method because
# it might do some processing (in the case of CreateView, it will
# call form.save() for example).
response = super(AjaxableResponseMixin, self).form_valid(form)
if self.request.is_ajax():
data = {
'pk': self.object.pk,
}
return JsonResponse(data)
else:
return response
您应该在 except 子句中 return form_invalid
而不是使用 render_to_response
def form_valid(self, form):
form.instance.user = self.request.user
try:
return super(DataCreate, self).form_valid(form)
except IntegrityError:
form.add_error('unique_name','You already have a user by that name')
return self.form_invalid(form)
在 django CreateView 中,我有两个字段应该是唯一的。
即。说用户和 unique_name
为了捕获完整性错误(当用户有重复项时 unique_name),我在正常的 Django 函数中编写了 try 和 except。它适用于 HTML 表单提交。 但是,当我尝试使用 Ajax 提交表单时,我找不到捕获错误的方法。
class数据创建(AjaxableResponseMixin,CreateView):
型号 = 处方
字段 = ['user','unique_name','x','y','z']
success_url = reverse_lazy('some url')</p>
<pre><code>def form_valid(self, form):
form.instance.user = self.request.user
try:
return super(DataCreate, self).form_valid(form)
except IntegrityError:
form.add_error('unique_name','You already have a user by that name')
return render_to_response('html')
def save(self):
request.session['unique_name'] = self.object.unique_name
super(DataCreate,self).save() </code>
注意:Ajax Mixin 取自 Django Documentation(1.7),如下所示。
class AjaxableResponseMixin(对象):
"""
Mixin 为表单添加 AJAX 支持。
必须与基于对象的 FormView(例如 CreateView)一起使用
"""
def form_invalid(self, form):
response = super(AjaxableResponseMixin, self).form_invalid(表格)
如果 self.request.is_ajax():
returnJsonResponse(form.errors,状态=400)
别的:
return 回应</p>
<pre>def form_valid(self, form):
# We make sure to call the parent's form_valid() method because
# it might do some processing (in the case of CreateView, it will
# call form.save() for example).
response = super(AjaxableResponseMixin, self).form_valid(form)
if self.request.is_ajax():
data = {
'pk': self.object.pk,
}
return JsonResponse(data)
else:
return response
您应该在 except 子句中 return form_invalid
而不是使用 render_to_response
def form_valid(self, form):
form.instance.user = self.request.user
try:
return super(DataCreate, self).form_valid(form)
except IntegrityError:
form.add_error('unique_name','You already have a user by that name')
return self.form_invalid(form)