[pyar] Inline formset y como asociar objetos relacionados antes del save
Varela Matias
matu.varela en gmail.com
Lun Abr 13 10:17:16 ART 2015
Estaba pensando. Si le añado al save un decorator @transaction.atomic
podría hacer los factura.items.add sin que realmente se guarden, no es
cierto? Aún no lo pruebo pero podría funcionar. Existe alguna recomendación
por la cuál NO hacer esto?
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()
>
> 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
>
>
--
*Matias E. Varela*
San Rafael, Mendoza
Blog: http://matuu.com.ar
Twitter: @matuvarela <http://twitter.com/matuvarela>
Skype: matu.varela
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150413/7e90c046/attachment.html>
More information about the pyar
mailing list