Comment des actions peuvent-elles se produire lorsqu'un champ est modifié dans l'un de mes modèles? Dans ce cas particulier, j'ai ce modèle:Actions déclenchées par un changement de champ dans 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')
et je voudrais demander que les unités créées, et le champ « commencé », peuplée avec le datetime courant (entre autres), lorsque l'état passe de configuration à Actif.
Je suppose qu'une méthode d'instance de modèle est nécessaire, mais les docs ne semblent pas avoir beaucoup à dire sur leur utilisation de cette manière.
Mise à jour: J'ai ajouté ce qui suit à ma classe de jeu:
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
J'ai mis à jour ma réponse en fonction de votre commentaire. –
django-model-utils implémente un champ de contrôle utile pour votre cas de terrain démarré: https://django-model-utils.readthedocs.org/en/latest/fields.html#monitorfield – jdcaballerov