Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/03/2011, 13:47
refreegrata
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
Respuesta: comparacion de datos, duda novatilla

Ok, disculpa, aqui va:
---------------------------------------------------------------------------------------------
Código:
class MiModelo(models.Model):
    nombre = models.CharField(max_length=30)
    fk_empresa = models.ForeignKey(Empresa)
    fk_cliente = models.ForeignKey(Cliente)
    fk_user_creacion = models.ForeignKey(User)
    fecha_creacion = CustomDateField(auto_now_add=True)
    fk_user_edicion = models.ForeignKey(User, null=True, blank=True, related_name='usuario_edicion')
    fecha_edicion = CustomDateField(null=True, blank=True)
    fecha_inicio = CustomDateField()
    externo = models.BooleanField(default=False)
    sector = models.CharField(max_length=70, null=True, blank=True)

    def obtenerAntiguo(self):
         antiguo = MiModelo.objects.get(id=self.id)
         return {'nombre':antiguo.nombre,
                      'fk_empresa':antiguo.fk_empresa,
                      'fk_cliente':antiguo.fk_cliente,
                      'sector':antiguo.sector}

    def save(self, *args, **kwargs):
        antiguo = obtenerAntiguo()
        super(MiModelo, self).save(*args, **kwargs)
        self.accion(antiguo)

   def comparacion(self, antiguo):
       return (antiguo['nombre'] != self.nombre or
                   antiguo['fk_empresa'] != self.fk_empresa or
                   antiguo['fk_cliente'] != self.fk_cliente or
                   antiguo['sector'] != self.sector)

   def accion(self, antiguo):
       if self.comparacion.antiguo:
                    .....
                    .....
--------------------------------------------------------------------------------------------
Todavía no lo programo pero algo como esto es lo que quiero.

Es la clase de un modelo en Django y en la funcion "obtenerAntiguo" obtengo algunos datos almacenados previos al UPDATE. Finalmente en "accion" , gracias a la funcion "comparacion" hago determinadas acciones si hay algún cambio en esos únicos datos.

La función que quiero reducir o hacer más genérica es comparación. Se que de momento tampoco compara pocos datos, así que lo que pido puede no parecer importante, pero mi idea es crear una clase base sin atributos, puesto que la operación la usaré en muchos modelos, cada uno con distintos atributos, algunas con muchísimos atributos.

Lo que quiero es, en cada clase hija, sobreescribir únicamente el método "obtenerAntiguo" y evitarme el reescribir "comparacion" que en algunos casos comparará contra un diccionario muy extenso.

Saludos.