[pyar] Inline formset y como asociar objetos relacionados antes del save
Maxi
maxirobaina en gmail.com
Lun Abr 13 11:48:00 ART 2015
El 11 de abril de 2015, 11:30, Matias Varela <matu.varela en gmail.com>
escribió:
> Buenos días lista.
>
> Estoy hace rato dándole vueltas a esto y no puedo darle en el clavo.
>
> Tengo un formulario con una serie de inlineformset que en la vista me
> funciona ok. Pero estoy intentado hacer un test que utiliza el formulario
> para crear el modelo, sin utilizar el Client, o sea, no utilizo el View.
> Pongo algo de código, explica mejor que yo:
>
> data = {
> u'tipo_documento': 80,
> u'numero_documento': u"12331248109",
> u'tipo_comprobante': 1,
> u'punto_venta': 1,
>
> # items
> u'items-TOTAL_FORMS': u'2',
> u'items-INITIAL_FORMS': u'0',
> u'items-MAX_NUM_FORMS': u'100',
> u'items-0-id': u'',
> u'items-0-factura': u'',
> u'items-0-codigo': u'',
> u'items-0-descripcion': u'Item 1',
> u'items-0-cantidad': u'1',
> u'items-0-unidad': u'7',
> u'items-0-iva': u'5',
> u'items-0-precio': u'100',
> u'items-1-id': u'',
> u'items-1-factura': u'',
> u'items-1-codigo': u'',
> u'items-1-descripcion': u'Item 2',
> u'items-1-cantidad': u'1',
> u'items-1-unidad': u'7',
> u'items-1-iva': u'4',
> u'items-1-precio': u'50',
> }
> form_factura = CreateComprobanteForm(data)
>
> ItemsFromSet = inlineformset_factory(Factura, ItemFactura)
> if form_factura.is_valid():
> factura = form_factura.save(commit=False)
> items_forms = ItemsFromSet(data, instance=factura)
> if items_form.is_valid():
> items = items_forms.save(commit=False)
> form_factura.save()
>
No lo pensé mucho pero hacer algo así?
form_factura = CreateComprobanteForm(data)
ItemsFromSet = inlineformset_factory(Factura, ItemFactura)
if form_factura.is_valid():
factura = form_factura.save(commit=False)
factura.save()
items_forms = ItemsFromSet(data, instance=factura)
if items_form.is_valid():
items = items_forms.save(commit=False)
for item in items:
item.factura = factura
item.save()
todo dentro de un @transaction.atomic
>
> Tanto factura como items tienen los objetos con la información
> correctamente seteada. El problema radica en que en el save de factura,
> necesito iterar por los items y no están establecidos aún (está vacio).
> Si hago factura.items.add([cada item]) falla porque este método actúa
> inmediatamente sobre la base de datos.
>
> Espero se entienda.
>
> Gracias de antemano
> --
> *Matías E. Varela*
> Skype: matu.varela
> Jadder: matuu en python.org.ar
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
--
Maximiliano Robaina
blog: http://maxirobaina.tumblr.com/
linkedin: http://ar.linkedin.com/in/maxirobaina
twitter: http://twitter.com/maxirobaina
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150413/1a41a0aa/attachment-0001.html>
More information about the pyar
mailing list