小编Jef*_*rry的帖子

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')
Run Code Online (Sandbox Code Playgroud)

当状态从Setup变为Active时,我想创建Units,并且'started'字段填充当前日期时间(以及其他内容).

我怀疑需要一个模型实例方法,但是文档似乎没有太多关于以这种方式使用它们的说法.

更新:我已将以下内容添加到我的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
Run Code Online (Sandbox Code Playgroud)

python django django-models

33
推荐指数
5
解决办法
3万
查看次数

标签 统计

django ×1

django-models ×1

python ×1