【发布时间】:2015-05-29 03:23:29
【问题描述】:
在 django CreateView 中,我有两个字段应该是唯一的。
即。说用户和唯一名称
为了捕捉完整性错误(当用户有重复的唯一名称时),我在普通的 Django 函数中编写了 try 和 except。它适用于 HTML 表单提交。 但是,当我尝试使用 Ajax 提交表单时,我找不到任何方法来捕获错误。
class DataCreate(AjaxableResponseMixin,CreateView):
model = Prescriptions
fields = ['user','unique_name','x','y','z']
success_url = reverse_lazy('some url')
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(object):
"""
Mixin to add AJAX support to a form.
Must be used with an object-based FormView (e.g. CreateView)
"""
def form_invalid(self, form):
response = super(AjaxableResponseMixin, self).form_invalid(form)
if self.request.is_ajax():
return JsonResponse(form.errors, status=400)
else:
return response
def form_valid(self, form):
# 我们确保调用父级的 form_valid() 方法,因为
# 它可能会做一些处理(在 CreateView 的情况下,它会
# 以调用 form.save() 为例)。
response = super(AjaxableResponseMixin, self).form_valid(form)
如果 self.request.is_ajax():
数据 = {
“pk”:self.object.pk,
}
返回 JsonResponse(数据)
别的:
返回响应
【问题讨论】:
标签: ajax django django-views