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.