python – 由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')

我想要创建单位,并且当状态从安装程序变为活动状态时,“开始”字段填充了当前的日期时间(等等)。

我怀疑需要一个模型实例方法,但文档似乎没有太多的用法来使用它们。

更新:我已将以下内容添加到我的Game类中:

    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
基本上,您需要覆盖保存方法,检查状态字段是否已更改,如果需要,请设置启动,然后让模型基类完成数据库。

这个棘手的部分是弄清楚这个领域是否改变了。查看这个问题中的mixins和其他解决方案,以帮助您解决这个问题:

> Dirty fields in django

http://stackoverflow.com/questions/1197674/actions-triggered-by-field-change-in-django

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 由Django中的字段更改引发的操作