#35739: formset error
-------------------------------+--------------------------------------
     Reporter:  hcjohnston     |                     Type:  Bug
       Status:  new            |                Component:  Forms
      Version:  5.0            |                 Severity:  Normal
     Keywords:  model formset  |             Triage Stage:  Unreviewed
    Has patch:  0              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+--------------------------------------
 using djagno 5.0

 I have an UpdateView which uses a ModelForm and two formsets
 ("item_formset" and "section_formset" below) to update a model. Both
 formsets have extra=0 and no initial data.
 I am getting an error when the item_formset.is_valid() is called. see
 traceback below. no issues with the ModelForm or section_formset

 {{{
 class SiteVisitItemForm(forms.ModelForm):

     class Meta:
         model = models.SiteVisitItem
         exclude = "report", "project", "action_for", "action_complete",
 "number"

 SiteVisitItemFormSet = forms.models.inlineformset_factory(
     models.SiteVisitReport, models.SiteVisitItem,
     form=SiteVisitItemForm,
     can_delete=True,
     extra=0,
     can_order=True,
 )

 class SiteVisitSectionForm(forms.Form):
     section_name = forms.CharField(max_length=128, required=False,
 widget=forms.TextInput(attrs={"placeholder": "Section heading"}))
     section_text = forms.CharField(max_length=1000, required=False,
 widget=forms.Textarea(attrs={"placeholder": "Introduction", "style":
 "height: 100px;"}))

     def clean(self):
         if self.cleaned_data["section_name"] == "" and
 self.cleaned_data["section_text"] == "" and self.cleaned_data["DELETE"] ==
 False:
             self.add_error(None, "Please include either section name or
 introduction text")

 SiteVisitSectionFormset = forms.formset_factory(
     form=SiteVisitSectionForm, can_delete=True, extra=0, can_order=True
 )

 }}}


 Traceback (most recent call last):
   File "python3.10/site-packages/django/core/handlers/exception.py", line
 55, in inner
     response = get_response(request)
   File "python3.10/site-packages/django/core/handlers/base.py", line 197,
 in _get_response
     response = wrapped_callback(request, *callback_args,
 **callback_kwargs)
   File "python3.10/site-packages/django/views/generic/base.py", line 104,
 in view
     return self.dispatch(request, *args, **kwargs)
   File "python3.10/site-packages/fivestar_app/quality/views.py", line 129,
 in dispatch
     return super().dispatch(request, *args, **kwargs)
   File "python3.10/site-packages/django/contrib/auth/mixins.py", line 109,
 in dispatch
     return super().dispatch(request, *args, **kwargs)
   File "python3.10/site-packages/django/views/generic/base.py", line 143,
 in dispatch
     return handler(request, *args, **kwargs)
   File "python3.10/site-packages/fivestar_app/quality/views.py", line 222,
 in post
     if all([form.is_valid(), item_formset.is_valid(),
 section_formset.is_valid()]):
   File "python3.10/site-packages/django/forms/formsets.py", line 384, in
 is_valid
     self.errors
   File "python3.10/site-packages/django/forms/formsets.py", line 366, in
 errors
     self.full_clean()
   File python3.10/site-packages/django/forms/formsets.py", line 423, in
 full_clean
     for i, form in enumerate(self.forms):
   File "python3.10/site-packages/django/utils/functional.py", line 47, in
 __get__
     res = instance.__dict__[self.name] = self.func(instance)
   File "python3.10/site-packages/django/forms/formsets.py", line 205, in
 forms
     return [
   File "python3.10/site-packages/django/forms/formsets.py", line 206, in
 <listcomp>
     self._construct_form(i, **self.get_form_kwargs(i))
   File "python3.10/site-packages/django/forms/models.py", line 1120, in
 _construct_form
     form = super()._construct_form(i, **kwargs)
   File "python3.10/site-packages/django/forms/models.py", line 737, in
 _construct_form
     kwargs["initial"] = self.initial_extra[i - self.initial_form_count()]

 Exception Type: KeyError at /quality/sitevisitreports/24022/2/items/
 Exception Value: 0


 the traceback appears to refer to this part of model form:

 {{{

         elif self.initial_extra:
             # Set initial values for extra forms
             try:
                 kwargs["initial"] = self.initial_extra[i -
 self.initial_form_count()]
             except IndexError:
                 pass
 }}}

 given that self.initial_extra = initial and initial is a dictionary, is
 IndexError the right exception here?
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35739>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070191c52e66fc-76a0c9e3-9d12-46ec-9436-f5632aa40019-000000%40eu-central-1.amazonses.com.

Reply via email to