python - fields - ¿Cómo guardar modelos de formset en línea en Django?
dynamic form django (1)
Los conjuntos de formularios tienen un método .save () y la documentación dice que debe guardarse en vistas como esta:
if request.method == "POST":
formset = BookInlineFormSet(request.POST, request.FILES, instance=author)
if formset.is_valid():
formset.save()
# Do something.
else:
formset = BookInlineFormSet(instance=author)
Estoy siguiendo esto, y funciona cuando se crea el padre, pero obtengo una excepción en Django cuando está guardando modelos existentes. El padre realmente se guarda en la base de datos y la excepción se produce al guardar modelos relacionados.
KeyError at /bcdetails/NewProds/1/
None
Request Method: POST
Request URL: http://rdif.local/bcdetails/NewProds/1/
Exception Type: KeyError
Exception Value:
None
Exception Location: /usr/lib/python2.5/site-packages/django/forms/models.py in save_existing_objects, line 403
Python Executable: /usr/bin/python
Python Version: 2.5.2
Python Path: [''/usr/lib/python2.5/site-packages/paramiko-1.7.4-py2.5.egg'', ''/usr/lib/python2.5/site-packages/Fabric-0.0.9-py2.5.egg'', ''/usr/lib/python2.5'', ''/usr/lib/python2.5/plat-linux2'', ''/usr/lib/python2.5/lib-tk'', ''/usr/lib/python2.5/lib-dynload'', ''/usr/local/lib/python2.5/site-packages'', ''/usr/lib/python2.5/site-packages'', ''/usr/lib/python2.5/site-packages/Numeric'', ''/usr/lib/python2.5/site-packages/PIL'', ''/usr/lib/python2.5/site-packages/gst-0.10'', ''/var/lib/python-support/python2.5'', ''/usr/lib/python2.5/site-packages/gtk-2.0'', ''/var/lib/python-support/python2.5/gtk-2.0'', ''/usr/lib/site-python'', ''/home/www/rdif.com/test/'']
Server time: Wed, 7 Jan 2009 23:18:19 -0700
Pasé un tiempo en la fuente Django pero no encuentro nada allí. ¿Debo iterar a través de cada formset y solo guardar los modelos que han cambiado?
Descubrí mi problema y es embarazoso.
En el formulario del modelo padre, tuve exclude = (''...'',)
en la clase Meta, y uno de los campos excluidos fue crítico para las relaciones en inline_formsets. Por lo tanto, eliminé las exclusiones e ignoré esos campos en la plantilla.