В django CreateView у меня есть два поля, которые должны быть уникальными вместе.Ошибка целостности целостности в общем представлении django для форм ajax
ie. скажем, user и unique_name
Чтобы поймать ошибку целостности (когда у пользователя есть дублирующееся уникальное имя), я написал try и за исключением нормальной функции Django. И он отлично работает с отправкой 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>
Note : Ajax Mixin is taken from Django Documentation(1.7) as follows. 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): # 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
отлично работает! Глупо от меня! Спасибо! –
Ум, отмечающий это как ответ? – schillingt
Разве мы не должны использовать 'except IntegrityError as e:'? – MiniGunnR