【发布时间】:2020-01-25 12:45:39
【问题描述】:
在这里,我正在编写属性方法来显示剩余休假天数和总休假天数。总休假天数工作正常,但 def leave_remaining_days(self) 这不起作用。
我去这个错误
'datetime.date' 对象没有属性'days'
这里的问题是在返回天数 return leave_remaining.days 时,但是当我返回 return leave_remaining 时,它就可以工作了。
这里如何计算剩余休假天数?
仅当leave.is_accepted 为真时,我才想计算剩余天数。
我想将1 的天数每天减少到end_day,直到
datetime.date.today() == self.end_day.
编辑:为此,我使用了 celery,但这也不起作用。最初检查它是否有效,我在周期性任务中设置了 minutes=1,但它不起作用。
models.py
class Leave(models.Model):
staff = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='staff')
sub = models.CharField(max_length=300)
msg = models.TextField()
start_day = models.DateField()
end_day = models.DateField()
is_accepted = models.BooleanField(default=False)
is_rejected = models.BooleanField(default=False)
@property
def leave_days(self):
diff = self.end_day - self.start_day
return diff.days
@property
def leave_remaining_days(self):
if self.is_accepted and not datetime.date.today() > self.end_day:
leave_remaining = self.end_day - datetime.timedelta(days=1)
return leave_remaining.days
#changes
from celery.schedules import crontab
from celery.task import periodic_task
@property
@periodic_task(run_every=crontab(minute=1))
def leave_remaining_day(self):
if self.is_accepted and not datetime.date.today() > self.end_day:
leave_remaining = self.leave_days - 1
return leave_remaining
【问题讨论】:
-
这是
date不是timedelta... -
我怎样才能减少日期
1然后@WillemVanOnsem?
标签: python django datetime django-models celery