Django как передать пользовательское сообщение об ошибке в представлениях на основе классов

Мне нужно показывать пользовательское сообщение об ошибке для недействительных форм. Я не знаю, как это сделать в представлениях на основе классов. вот мои представления на основе классов:

class EditPatient(UpdateView):
      model = Patient
      form_class = PatientUpdateFrom
      template_name = 'hospital/edit-patient.html'
      def form_valid(self, form):
        error_message = None
        if form.is_valid():
           name = self.request.POST["patient_name"]
           email = self.request.POST["phone"]
           if len(name) > 20:
               error_message = 'maximum 20 character allowed in name'
           if len(phone) > 20:
               error_message = 'maximum 15 character allowed in phone'
          
           """ #I tried this but didn't work 
           def get_context_data(self, **kwargs):
                context = super(EditPatient,self).get_context_data(**kwargs)
                context['error_message'] = error_message
                return context
           """
          
           if not error_message:
                messages.add_message(self.request, messages.INFO, 'Patient Sucessfully Updated')     
                form.save()
                 
           
           return redirect('hospital:edit-patient',self.object.slug)

Я знаю, что могу сделать это в forms.py, хотя raise forms.ValidationError но я хочу знать как сделать это в представлениях на основе классов потому что я обновляю несколько полей из другой модели.

Вы можете переопределить form_invalid метод вашего UpdateView класса:

def form_invalid(self, form):
    context = self.get_context_data(form=form)
    context.update({"my_message": "Soemthign went wrong"})
    return self.render_to_response(context)

В качестве альтернативы можно воспользоваться django-braces и использовать следующий миксин: https://django-braces.readthedocs.io/en/latest/form.html#forminvalidmessagemixin

Вернуться на верх