Sunday, 29 September 2019

'datetime.date' object has no attribute 'days' error while using timedelta

Here I am writing property method to display the remaining leave days and total leave days.The total leave days are working fine but def leave_remaining_days(self) this is not working. I go this error

'datetime.date' object has no attribute 'days'

Here the problem is while returning the no.of days return leave_remaining.days but when i return return leave_remaining just then it works.

How can I calculate the remaining leave days here ?

Only if leave.is_accepted True then i want to calculate remaining days.

I want to decrease days 1 to the end_day by each day until

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

EDIT: For this I used celery but this is also not working.Initially to check whether it works or not I set minutes=1 in the periodic task but it doesn't works.

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


from 'datetime.date' object has no attribute 'days' error while using timedelta

No comments:

Post a Comment