sábado, 11 de mayo de 2013

Crear modelos Master-Detalle en Django

Podemos crear un modelo conteniendo dos o más clases en django con la clase  ModelAdmin. La clase ModelAdmin es la representación de un modelo en la interfaz del administrador, que nos permite establecer el tipo de relación entre las clases 
que le incluyamos.

La clase ModelAdmin ya viene activada por defecto, pero en versiones anteriores es necesario añadir django.contrib.admin al bloque INSTALED_APPS del archivo settings.py para poder utilizarlo

Como ejemplo de cómo utilizar ModelAdmin, crearemos el modelo Master-Detalle de una factura, para ello editamos el archivo models.py y creamos las clases necesarias:

class factura(models.Model):
    nombre = models.CharField(max_length=40, blank=True)
    nit_cliente = models.CharField(max_length=10, blank=True)
    fecha = models.DateField(null=True)
    total = models.IntegerField(null=True, blank=True)
def  __unicode__(self):
    return self.total

class detalle_factura(models.Model):
    factura = models.ForeignKey(factura, db_column='factura_id')
    cliente = models.IntegerField(null=True, blank=True)
    producto = models.ForeignKey(producto, db_column='producto_id')
    cantidad = models.IntegerField()
    subtotal = models.IntegerField()
def  __unicode__(self):
    return self.subtotal


Ahora creamos el modelo utilizando ModelAdmin y lo añadimos al sitio Admin:

class detalle_facturaInline(admin.TabularInline):
    model = detalle_factura

class facturaAdmin(admin.ModelAdmin):
    inlines = (detalle_facturaInline,)

admin.site.register(factura, facturaAdmin)
   

Con esto ya tenemos el modelo Master-Detalle listo.



 Para más información visita la documentación de Django: docs.djangoproject.com/en/dev/ref/contrib/admin


9 comentarios:

  1. Muchas gracias por el codigo me sirvio de mucho

    ResponderEliminar
  2. No queda claro, ni explicacion alguna en como en un mismo template podemos visualizar el encabezado (factura) y el detalle (detalle_factura). La verdad es una demostracion muy pobre

    ResponderEliminar
  3. Excelente, gracias por el aporte!. Me re sirvio

    ResponderEliminar
  4. como puedo sumar los subtotales y completar el total automaticamente?

    ResponderEliminar
  5. Hola, gracias por tu solución. una consulta: esto solo podemos verlo como administrador del sitio. bajo un logueo de admin como superusuario; en algún otro, caso se podría ver libremente en la pagina para usuarios comunes. y como se podría hacer. Agradecido de antemano.

    ResponderEliminar
  6. Exelente!!! podrias hacer una segunda parte de como calcular los subtotales hacia el maestro total? Muchas gracias!!!

    ResponderEliminar
  7. Claro corto y preciso, Muchas Gracias!!

    ResponderEliminar

Gracias por tu comentario! :)