"datetime.date"对象在使用 timedelta 时没有属性"days"错误



在这里,我正在编写属性方法来显示剩余休假天数和总休假天数。总休假天数正常,但def leave_remaining_days(self)这是行不通的。 我去这个错误

">

datetime.date"对象没有属性"days">

这里的问题是在返回天数时return leave_remaining.days但是当我返回时return leave_remaining它就可以工作了。

我如何计算剩余的休假天数?

只有当leave.is_accepted为真时,我才想计算剩余天数。

我想每天减少1end_day的天数,直到

datetime.date.today() == self.end_day.

编辑:为此我使用了芹菜,但这也不起作用。最初为了检查它是否有效,我在定期任务中设置了 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会导致date

date没有days属性(您可以通过创建一个属性并对其调用dir(...)或检查文档来检查(。

在旁注中,如果您希望leave_remaining_days返回距离Leave结束还剩多少天,那么您应该执行以下操作:

@property
def leave_remaining_days(self):
if self.is_accepted and not datetime.date.today() > self.end_day:
delta = self.end_day - datetime.date.today()
return delta.days

由于您正在存储start_dayend_day我不确定您是否需要每天减少任何东西。你也许可以检查我上面写的属性。

如果我正确理解您的问题,那么在您的代码中:

leave_remaining = self.end_day - datetime.timedelta(days=1)
return leave_remaining.days

leave_remainingself.end_day前 1 天的datetime.date,我认为这就是您想要的; 只需像这样直接返回日期:

return leave_remaining

我认为最明显的答案是像这样定义你的leave_remaining_days道具:

@property
def leave_remaining_days(self):
if self.is_accepted:
return self.leave_days - 1

不是吗?

你是这个意思吗?

@property
def leave_remaining_days(self):
if self.is_accepted and not datetime.date.today() > self.end_day:
leave_remaining = self.end_day - datetime.date.today()
return leave_remaining.days

这将起作用:

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.day

leave_remaining。一天会给你剩余的休假天数

相关内容

  • 没有找到相关文章