Opened 11 years ago
Closed 11 years ago
#24482 closed Uncategorized (wontfix)
Initializing Grouped model Form does not work
| Reported by: | Drife59 | Owned by: | nobody |
|---|---|---|---|
| Component: | Uncategorized | Version: | 1.7 |
| Severity: | Normal | Keywords: | GroupedModelForm Initialization |
| Cc: | bjbtiben@… | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
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
- 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.
Change History (3)
comment:1 by , 11 years ago
comment:3 by , 11 years ago
| Resolution: | → wontfix |
|---|---|
| Status: | new → closed |
Hi,
Shouldn't
formset = LigneProduitFormSet2(initial)beformset = LigneProduitFormSet2(initial=initial)instead?