Здесь я пишу метод свойства для отображения оставшихся дней отпуска и общего количества дней отпуска. Общие дни отпуска работают нормально, но def leave_remaining_days(self)
это не работает.Я получаю эту ошибку
У объекта 'datetime.date' нет атрибута 'days'
Здесь возникает проблема при возврате дней без чисел return leave_remaining.days
, но когдая возвращаю return leave_remaining
только тогда это работает.
Как я могу рассчитать оставшиеся дни отпуска здесь?
Только если leave.is_accepted
True, тогда я хочу рассчитать оставшиеся дни.
Я хочу уменьшить количество дней 1
до end_day
каждый день до
datetime.date.today() == self.end_day
.
РЕДАКТИРОВАТЬ: Дляэто я использовал сельдерей, но это также не работает. Первоначально, чтобы проверить, работает ли оно, я установил минут = 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