[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