Python 如何根据某些条件自动设置django模型属性?
我想设置is\u clocked\u out=True每当员工下班时,我如何实现这一目标。我知道django信号可以完成这项工作,但我可以在django模型上编写方法来完成这项工作吗。如果我写一篇文章,说明每次员工下班时该方法将如何执行。我是否需要调用它,否则每次保存模型对象时它都会起作用。@property会帮我吗?那怎么办?提前感谢。您可以创建一个方法,该方法可以停止计时,并更改Python 如何根据某些条件自动设置django模型属性?,python,django,class,Python,Django,Class,我想设置is\u clocked\u out=True每当员工下班时,我如何实现这一目标。我知道django信号可以完成这项工作,但我可以在django模型上编写方法来完成这项工作吗。如果我写一篇文章,说明每次员工下班时该方法将如何执行。我是否需要调用它,否则每次保存模型对象时它都会起作用。@property会帮我吗?那怎么办?提前感谢。您可以创建一个方法,该方法可以停止计时,并更改已停止计时。这比覆盖模型的save()方法要简单 class TimecardModel(models.Model
已停止计时。这比覆盖模型的save()
方法要简单
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)
然后通过instance.clockout()
要覆盖.save()
方法,可以执行以下操作:
def clockout(self):
self.clock_out = timezone.now()
self.is_clocked_out = True
self.save()
return self.is_clocked_out
您可以创建一种方法,该方法可以取消计时,并更改是否取消计时
。这比覆盖模型的save()
方法要简单
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)
然后通过instance.clockout()
要覆盖.save()
方法,可以执行以下操作:
def clockout(self):
self.clock_out = timezone.now()
self.is_clocked_out = True
self.save()
return self.is_clocked_out
每次在模型对象上调用save()时,这是否都有效?或者我需要在某个地方调用它吗?@Appyens只有在您调用instantlclockout()
时,此选项才会起作用。如果希望代码在保存时自动工作,则必须覆盖模型的默认.save()
方法。我也可以向您展示如何做到这一点,但它也有自己的缺点。谢谢@Hybrid。请告诉我如何重写save方法。@Appyens我为您更新了答案。请记住,.save()
技巧将在clock\u out
中有任何值时不断更新模型。而且,这不会影响命令行保存。每次调用模型对象上的save()时,这会起作用吗?或者我需要在某个地方调用它吗?@Appyens只有在您调用instantlclockout()
时,此选项才会起作用。如果希望代码在保存时自动工作,则必须覆盖模型的默认.save()
方法。我也可以向您展示如何做到这一点,但它也有自己的缺点。谢谢@Hybrid。请告诉我如何重写save方法。@Appyens我为您更新了答案。请记住,.save()
技巧将在clock\u out
中有任何值时不断更新模型。此外,这不会影响命令行保存。