#24482: Initializing Grouped model Form does not work
-----------------------------+---------------------------------------------
     Reporter:  Drife59      |      Owner:  nobody
         Type:               |     Status:  new
  Uncategorized              |
    Component:               |    Version:  1.7
  Uncategorized              |
     Severity:  Normal       |   Keywords:  GroupedModelForm Initialization
 Triage Stage:  Unreviewed   |  Has patch:  0
Easy pickings:  0            |      UI/UX:  0
-----------------------------+---------------------------------------------
 Hi,

 I wanted to initialized a grouped model form using datas in session.

 Here is my code commented:

 {{{
         LigneProduitFormSet2 = modelformset_factory(ProduitCommande,
 extra=1)

         initial=[]
         #Just for the test, get only the first item from Session, id and
 qte
         id_produit, quantite = panier.panier.popitem()

         #Get corresponding product object
         produit = Produit.objects.get(id=id_produit)
         #Product object has a ManyToManyField relation to Cuisson, getting
 corresponding object
         cuissons = produit.cuisson_dispo.all()
         #Creating corresponding object for initialization
         ligne_produit = {"produit": produit, "cuisson":cuissons,
 "quantite": quantite,
                          "prix_unitaire":produit.prix, "prix_ligne":
 (produit.prix * float(quantite))}
         initial.append(ligne_produit)

         # This is working
         formset = LigneProduitFormSet2(initial)

         #This is breaking everything
         for form in formset:
             pass
             #print(form.as_table())
 }}}

 If my understanding of the documentation is correct, I should be able to
 initialize the data like this.
 " ''As with regular formsets, it’s possible to specify initial data for
 forms in the formset by specifying an initial parameter when instantiating
 the model formset class returned by modelformset_factory()'' "

 If I delete the initial parameter, my code is working, even my template is
 properly generated.
 the loading from tha database is also working.

 Here is the ful stacktrace:


 {{{
 Traceback:
 File "/usr/local/lib/python3.4/dist-packages/django/core/handlers/base.py"
 in get_response
   111.                     response = wrapped_callback(request,
 *callback_args, **callback_kwargs)
 File "/usr/local/lib/python3.4/dist-
 packages/django/contrib/auth/decorators.py" in _wrapped_view
   21.                 return view_func(request, *args, **kwargs)
 File "/home/drife/projet/crepes_bretonnes/blog/views.py" in
 commande_boulangerie
   166.         for form in formset:
 File "/usr/local/lib/python3.4/dist-packages/django/forms/formsets.py" in
 __iter__
   72.         return iter(self.forms)
 File "/usr/local/lib/python3.4/dist-packages/django/utils/functional.py"
 in __get__
   55.         res = instance.__dict__[self.func.__name__] =
 self.func(instance)
 File "/usr/local/lib/python3.4/dist-packages/django/forms/formsets.py" in
 forms
   141.         forms = [self._construct_form(i) for i in
 xrange(self.total_form_count())]
 File "/usr/local/lib/python3.4/dist-packages/django/forms/formsets.py" in
 total_form_count
   114.             return
 min(self.management_form.cleaned_data[TOTAL_FORM_COUNT],
 self.absolute_max)
 File "/usr/local/lib/python3.4/dist-packages/django/forms/formsets.py" in
 management_form
   93.             if not form.is_valid():
 File "/usr/local/lib/python3.4/dist-packages/django/forms/forms.py" in
 is_valid
   162.         return self.is_bound and not bool(self.errors)
 File "/usr/local/lib/python3.4/dist-packages/django/forms/forms.py" in
 errors
   154.             self.full_clean()
 File "/usr/local/lib/python3.4/dist-packages/django/forms/forms.py" in
 full_clean
   353.         self._clean_fields()
 File "/usr/local/lib/python3.4/dist-packages/django/forms/forms.py" in
 _clean_fields
   362.             value = field.widget.value_from_datadict(self.data,
 self.files, self.add_prefix(name))
 File "/usr/local/lib/python3.4/dist-packages/django/forms/widgets.py" in
 value_from_datadict
   228.         return data.get(name, None)

 Exception Type: AttributeError at < my url>
 Exception Value: 'list' object has no attribute 'get'
 }}}

 So I had a closer look on what want wrong,

 Exception Value: 'list' object has no attribute 'get'
 File "/usr/local/lib/python3.4/dist-packages/django/forms/widgets.py" in
 value_from_datadict
   228.         return data.get(name, None)

 using some print:

 {{{
         print("data : %s " % data)
         print("name : %s " % name)
 }}}

 Here is what I got:

 {{{
 data : [{'prix_ligne': 4.75, 'produit': <Produit: Baguette de Boulangerie
 Bêle >, 'prix_unitaire': 0.95, 'cuisson': [<CuissonDispo: Pas trop cuit>,
 <CuissonDispo: Standard>, <CuissonDispo: Bien cuit>], 'quantite': 5}]
 name : form-TOTAL_FORMS
 }}}

 So we are trying to do a "get" on object data which is a list... Here is
 the reason.

 So,

 Is there something very wrong about my initialization ?
 Is there a nasty bug is my particular case ?

 Regards.

--
Ticket URL: <https://code.djangoproject.com/ticket/24482>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/050.83f2bdaf68cfb490a1d9050965918462%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to