2015-03-25 4 views
0

В 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 

ответ

1

Вы должны вернуть 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) 
+0

отлично работает! Глупо от меня! Спасибо! –

+0

Ум, отмечающий это как ответ? – schillingt

+0

Разве мы не должны использовать 'except IntegrityError as e:'? – MiniGunnR

Смежные вопросы