[pyar] Inline formset y como asociar objetos relacionados antes del save

Matias Varela matu.varela en gmail.com
Sab Abr 11 11:30:16 ART 2015


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

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150411/c983eb11/attachment.html>


More information about the pyar mailing list