¿Cómo se producen las acciones cuando se cambia un campo en uno de mis modelos? En este caso particular, tengo este modelo:Acciones desencadenadas por el cambio de campo en Django
class Game(models.Model):
STATE_CHOICES = (
('S', 'Setup'),
('A', 'Active'),
('P', 'Paused'),
('F', 'Finished')
)
name = models.CharField(max_length=100)
owner = models.ForeignKey(User)
created = models.DateTimeField(auto_now_add=True)
started = models.DateTimeField(null=True)
state = models.CharField(max_length=1, choices=STATE_CHOICES, default='S')
y me gustaría tener unidades creadas, y el campo 'iniciado' rellena con la fecha y hora actuales (entre otras cosas), cuando el estado pasa de configuración para Activo.
Sospecho que se necesita un método de instancia modelo, pero los documentos no parecen tener mucho que decir sobre su uso de esta manera.
Actualización: he añadido lo siguiente a mi clase de juego:
def __init__(self, *args, **kwargs):
super(Game, self).__init__(*args, **kwargs)
self.old_state = self.state
def save(self, force_insert=False, force_update=False):
if self.old_state == 'S' and self.state == 'A':
self.started = datetime.datetime.now()
super(Game, self).save(force_insert, force_update)
self.old_state = self.state
He actualizado mi respuesta de acuerdo con su comentario. –
django-model-utils implementa un campo de monitor útil para su caso de campo iniciado: https://django-model-utils.readthedocs.org/en/latest/fields.html#monitorfield – jdcaballerov