モデルのいずれかでフィールドが変更されたときにアクションを実行するにはどうすればよいですか?この特定のケースでは、私は、このモデルがあります: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')
をし、状態がへのセットアップから行くとき、私は、作成した単位、及び(とりわけ)、現在の日時が移入「開始」フィールドを持っていると思いますアクティブ。
私は、モデルインスタンスメソッドが必要だと思うが、ドキュメントはこのように使用することについてはあまり言わないようだ。
アップデート:私は私のゲームのクラスに以下を追加しました:効果的です
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
私はあなたのコメントに沿って私の答えを更新しました。 –
django-model-utilsは、開始したフィールドの大文字小文字の区別に役立つモニタフィールドを実装しています:https://django-model-utils.readthedocs.org/en/latest/fields.html#monitorfield – jdcaballerov