#django #django-forms #django-class-based-views
#django #django-forms #django-представления на основе классов
Вопрос:
Я работаю с CBV, который использует 2 ModelForm
экземпляра. Я хотел бы отобразить отдельные ошибки формы. Кажется, что это немного сложно при использовании нескольких форм в представлении на основе классов.
Вот небольшой фрагмент, чтобы показать, с чем я работаю…
class EmployeeCreate(CreateView):
form_class = EmployeeCreateForm
form_class_2 = AddressCreateForm
def post(self, request, *args, **kwargs):
employee_form = self.form_class(request.POST)
address_form = self.form_class_2(request.POST)
# Make sure both forms are validated
if employee_form.is_valid() and address_form.is_valid():
employee = employee_form.save(commit=False)
address = address_form.save(commit=False)
employee.parent = self.request.user
employee.save()
address.user = employee
address.save()
return JsonResponse({'message': 'Employee created successfully.'}, status=200)
else:
return self.form_invalid(**kwargs)
def get_context_data(self, **kwargs):
# render both forms to create an Account, and Address
context = super(EmployeeCreateView, self).get_context_data()
context['employee_form'] = self.form_class
context['address_form'] = self.form_class_2
return context
def form_invalid(self, **kwargs):
return JsonResponse({'success': False})
Теперь, когда форма недействительна, form_invalid
метод вызывается и возвращает сообщение JsonResponse, но я бы предпочел вернуть конкретную ошибку формы.
Я пытаюсь найти способ отображения каждой отдельной ошибки формы для employee_form
и address_form
. Есть ли возможный способ сделать это переопределение в form_invalid
методе?
Заранее благодарю вас!
Ответ №1:
вы возвращаете ошибку обеих форм в одном JsonResponse. Вместо этого вы должны возвращать ошибку разных форм в одном JsonResponse, например
return JsonResponse({'employee_form_errors': self.form_invalid(employee_form),
'address_form_errors': self.form_invalid(address_form) }, status=400)
вы должны использовать индивидуальное использование form_invalid
с обеими формами.