如果字段大于12,如何使模型方法自动运行

时间:2019-05-29 18:01:37

标签: python django django-models

如果我的模型工作时间超过12.0,我希望自动设置end_time,而无需用户保存或进入应用程序。有没有一种方法可以在模型方法中执行而无需用户保存时间条目?

Models.py

class Entry(models.Model):
    TUID = models.IntegerField()
    start_time = models.DateTimeField()
    end_time = models.DateTimeField(blank=True, null=True, db_index=True)
    seconds_paused = models.PositiveIntegerField(default=0)
    pause_time = models.DateTimeField(blank=True, null=True)
    date_updated = models.DateTimeField(auto_now=True)
    hours = models.DecimalField(max_digits=11, decimal_places=2, default=0)
    pause_time_end = models.DateTimeField(blank=True, null=True)


    def _str_(self):
        return self.TUID

    def timeStop(self):
        if self.hours >= 12:
           self.end_time = timezone.now()
        return self.end_time

1 个答案:

答案 0 :(得分:0)

这个问题尚不完全清楚,但是我想假设的意思是,保存对象时,如果尚未设置end_time,则要自动设置。一种选择是在pre_save hook中执行此操作,但是我更喜欢覆盖save() method。像这样:

class Entry(models.Model):
    ...
    def save(self, *args, **kwargs):
        if (self.hours >= 12) and not self.end_time:
           self.end_time = timezone.now()
        super().save(*args, **kwargs)