如何根据某些条件自动设置Django模型属性?

时间:2019-03-13 19:48:02

标签: python django class

class TimecardModel(models.Model):
    latitude = models.FloatField(max_length=16, blank=True, null=True)
    longitude = models.FloatField(max_length=16, blank=True, null=True)
    employee = models.ForeignKey(User)
    clock_in = models.DateTimeField(blank=True, null=True, editable=True)
    clock_out = models.DateTimeField(blank=True, null=True)
    is_clocked_out = models.BooleanField(blank=True, default=False)

我想在每次员工clock_out时设置 is_clocked_out = True ,我该如何实现这一目标。我知道django信号可以做到这一点,但是我可以在django模型上编写方法来做到这一点。如果我写一个这样的方法,那么每次emplyee clock_out都将执行该方法。我是否需要调用它,否则每次保存模型对象时它都将起作用。 @property可以帮助我吗?那怎么办预先感谢。

1 个答案:

答案 0 :(得分:1)

您可以创建一种计时方法,并更改is_clocked_out。这比覆盖模型的save()方法要简单。

def clockout(self):
    self.clock_out = timezone.now()
    self.is_clocked_out = True
    self.save()
    return self.is_clocked_out

然后您可以通过instance.clockout()

调用此代码来退出时钟

要覆盖.save()方法,您可以这样做:

def save(self, *args, **kwargs):
    if self.clock_out:
        self.is_clocked_out = True
    super(TimecardModel, self).save(*args, **kwargs)