Cómo sobreescribir el método save() en Django

Archivada en Desarrollo Web

Cómo sobreescribir el método save() en Django

Para el nuevo indicador, que mide el tiempo en el que distribuimos nuestro producto desde las subdelegaciones hasta los centros de atención a clientes, capturamos los siguientes datos:

  • id del sitio,
  • fecha de corte,
  • lote de producción,
  • fecha y hora (timestamp) de recepción en la subdelegación, y
  • fecha y hora de recepción en el centro de atención.

Necesitamos saber la diferencia en horas entre las fechas de recepción, pero como ya sabemos lo complicado que es hacer cálculos en consultas con Django, en esta ocasión vamos a generar la diferencia al momento de guardar la tabla, sobreescribiendo el método save() de nuestro modelo.

Sobreescribiendo el método save() en Django

Primero veamos nuestro modelo:

class Distribucion (models.Model):
    mac           = models.CharField (max_length = 6)
    fecha_corte   = models.DateField (default=timezone.now)
    lote          = models.CharField (max_length = 13)
    recibidoVRD   = models.DateTimeField ()
    disponibleMAC = models.DateTimeField ()
    diferencia    = models.IntegerField ()

    def __unicode__ (self):
        return "%s - %s - %s" % (self.mac, self.lote, self.fecha_corte)

Como pueden ver, existe un campo llamado diferencia que será nuestro campo calculado, para eso creamos el método save dentro de nuestro modelo y ponemos el valor calculado en segundos.

def save(self):
    difFecha = self.disponibleMAC - self.recibidoVRD
    self.diferencia = difFecha.seconds
    super (Distribucion, self).save()

Con esto, cada vez que actualicemos o agreguemos un registro, se calcularán los segundos de diferencia entre las dos fechas, en nuestra vista, podemos convertir estos segundos en el formato de nuestra preferencia.

Javier Sanchez Toledano

Soy programador en Django+Python y WordPress. Auditor líder certificado en la norma ISO 9001:2008. Fotógrafo aficionado.
Redes Sociales:

Tlaxcala, México

Comentarios