首页 > 解决方案 > 如果字段大于 12,如何让模型方法自动运行

问题描述

如果我的模型字段小时数超过 12.0,我希望自动设置 end_time,而无需用户保存甚至在应用程序中。有没有办法在模型方法中做到这一点,而用户不必保存时间输入?

模型.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

标签: pythondjangodjango-models

解决方案


这个问题并不完全清楚,但我假设你的意思是当对象被保存时,end_time如果它还没有设置,你想自动设置它。一种选择是在pre_save挂钩中执行此操作,但我更喜欢覆盖该save()方法。像这样的东西:

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)

推荐阅读