【发布时间】:2010-11-14 22:09:05
【问题描述】:
当我的一个模型中的字段发生更改时,我如何进行操作?在这种特殊情况下,我有这个模型:
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 实现了一个对您开始的字段案例有用的监控字段:django-model-utils.readthedocs.org/en/latest/…
标签: python django django-models