Форма Django не показывает ошибки, но повторно отображает новую форму

У меня есть представление Insert, которое отображает данные модели из одной основной и одной связанной модели. После завершения отображения данных к таблице добавляется форма для добавления нового связанного элемента.

Это работает нормально - однако если я ввожу недопустимые данные (например, недопустимое время, если быть точным) и нажимаю одну из кнопок отправки, страница просто обновляется с пустой формой для ввода соответствующих данных. Она не отображает введенные данные и не выводит сообщение об ошибке, хотя форма включает поля для ошибок.

Я пробовал добавить form_invalid в CBV и вызвать форму, но я вижу, что она просто вызывает InserView снова без контекста (что в основном делает вызов get_context_data снова и дает мне новую пустую форму).

Как мне заставить его вывести форму с моими данными и ошибками. Смотрите код ниже:

views.py

class SegmentAddView(LoginRequiredMixin,CreateView):
  login_url = reverse_lazy('login')
  model = Segment
  template_name = 'segment_add_view.html'
  form_class = SegmentForm

  def get_context_data(self, **kwargs):
    context = super(SegmentAddView,self).get_context_data(**kwargs)
    program_info = get_object_or_404(Program, pk=self.kwargs['pk'])
    context['program_info'] = program_info
    last_segment = program_info.segments.last()
    if last_segment:
      add_sequence_num = last_segment.sequence_number + Decimal(1.00)
    else: 
      add_sequence_num = Decimal(1.00)
    context['form'] = SegmentForm(initial={'sequence_number': add_sequence_num})       
    return context

  def form_valid(self, form):
    program = get_object_or_404(Program, pk=self.kwargs['pk'])
    form.instance.program = program
    return super().form_valid(form)

  def form_invalid(self, form):
    print(" Inside form invalid")
    return super(SegmentAddView, self).form_invalid(form)

  def get_success_url(self, **kwargs):
    print(" Inmside Success")
    altered_program = Program.objects.get(id=self.kwargs['pk'])
    altered_program.save()

    if 'save_another' in self.request.POST:
        return reverse_lazy('segment_add', args=[self.kwargs['pk']])
    return reverse_lazy('program_detail', args=[self.kwargs['pk']])
           
forms.py

class SegmentForm(forms.ModelForm):
          
  class Meta:
    model = Segment
    exclude = ('seg_length_time_delta',
        'seg_run_time',
        'seg_run_time_delta'   ,
        'seg_remaining_time',
        'seg_remaining_time_delta',
        'program',
        'audit_user',
    )     
          
  def form_valid(self, form):
    form.instance.audit_user = self.request.username
    #request.user.username
    return super().form_valid(form)
          

Шаблон выглядит так:

Изначально у меня было немного другое отображение ошибки - но я изменил его на этот блок ошибок, просто чтобы посмотреть, смогу ли я вывести что-нибудь безрезультатно.

Как вызвать форму с контекстом произошедших ошибок? Не совсем уверен, как это правильно сделать.

Спасибо

Я был на правильном пути - но мне не хватало нужных контекстных значений.

Решение:

Внутри моего views.py - нужно было добавить предыдущую форму в контекст, когда она недействительна, а затем отрисовать ее.

def form_invalid(self, form , **kwargs):
    context = self.get_context_data(**kwargs)
    context['form'] = form
    return self.render_to_response(context)
Вернуться на верх