Каков правильный способ поднять ValidationError
в FormView
и передать его в шаблон с перезагруженной формой? В настоящее время у меня есть это:ValidationError в FormView Django
class ProfileUpdateView(FormView):
template_name = 'profile_update.html'
form_class = UserDetailForm
success_url = '/profile/'
def form_valid(self, form):
userdetail = form.save(commit = False)
try:
already_exist_info = UserDetail.objects.get(document_type=userdetail.document_type,
series=userdetail.series, number=userdetail.number)
raise forms.ValidationError("Document already exists in DB")
except UserDetail.DoesNotExist:
[... some stuff here ...]
userdetail.save()
return super(ProfileUpdateView, self).form_valid(form)
Он работает, и я получаю страницу ошибки, но я бы предпочел, чтобы показать ошибку в шаблоне Reloaded формы. Кроме того, есть ли встроенный способ получить ValidationError
в FormView
? Я имею в виду, без импорта forms
от django
.
Thanx.
EDIT
Ну, я решил сделать все выходку другим способом - с помощью clear()
метода. Так что теперь у меня есть это:
views.py
class ProfileUpdateView(FormView):
template_name = 'profile_update.html'
form_class = UserDetailForm
success_url = '/profile/'
def form_valid(self, form):
userdetail = form.save(commit = False)
#[... some stuff ...]
userdetail.save()
return super(ProfileUpdateView, self).form_valid(form)
forms.py
class UserDetailForm(forms.ModelForm):
class Meta:
model = UserDetail
exclude = ('user',)
def clean(self):
cleaned_data = super(UserDetailForm, self).clean()
document_type = cleaned_data.get("document_type")
series = cleaned_data.get("series")
number = cleaned_data.get("number")
try:
already_exist_info = UserDetail.objects.get(document_type=document_type,
series=int(series), number=number)
raise forms.ValidationError("Document already exists in DB")
except:
pass
return cleaned_data
Все вроде бы нормально в соответствии с docs, однако на этот раз форма просто сохраняет без ошибок.
Вы пытались 'form.add_error ('field', 'message message')'? –
Yeap, это не работает, так как я думаю, что моя ошибка не относится к определенному полю ... – chem1st
Хорошо, попробуйте избавиться от form.save. Не можете ли вы просто получить доступ к данным с помощью form.cleaned_data? –