Come si verificano le azioni quando un campo viene modificato in uno dei miei modelli? In questo caso particolare, ho questo modello:Azioni attivate dal cambio di campo in 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')
e vorrei avere unità create, e il campo 'iniziato' popolato con il datetime corrente (tra l'altro), quando lo stato passa da Setup per Attivo.
Ho il sospetto che sia necessario un metodo di istanza di modello, ma i documenti non sembrano avere molto da dire sull'utilizzo in questo modo.
Update: ho aggiunto quanto segue per la mia classe di gioco:
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
Ho aggiornato la mia risposta in linea con il tuo commento. –
django-model-utils implementa un campo monitor utile per il caso di campo avviato: https://django-model-utils.readthedocs.org/en/latest/fields.html#monitorfield – jdcaballerov