Как рассчитать срок исполнения в django на основе существующей даты

Как мне рассчитать срок погашения по этой модели на основе даты продления. Я хочу, чтобы дата наступления срока была через 5 лет после даты продления.

Я застрял. Мне нужна помощь.

Это мой файл models.py в Django

    def get_deadline():
    return dateRenewed() + timedelta(days=1825)

    class Trademark(models.Model):
        trademarkName = models.CharField(max_length=100)
        trademarkClass = models.CharField(max_length=100)
        dateCreated = models.DateTimeField(default=timezone.now)
        acknowledgeDoc = models.FileField(upload_to='acknowledge_docs', default='default.jpg')
        acceptanceDoc = models.FileField(upload_to='acceptance_docs/', default='default.jpg')
        cert = models.FileField(upload_to='trademark_cert/', default='default.jpg')
        renewalDoc = models.FileField(upload_to='renewalDocs', default='default.jpg')
        dateRenewed = models.DateTimeField(auto_now_add=False, auto_now=False, blank=True, null=True)
        duedate = models.DateTimeField(default=get_deadline)
        uploadedBy = models.ForeignKey(User, on_delete=models.RESTRICT)
    ```

Вы можете использовать timedelta для добавления лет:

from dajngo.utils import timezone

delta = timezone.timedelta(days=365*5) # create a timedelta object

duedate = dateRenewed + delta

Однако это не обрабатывает високосные годы.

Учет високосных годов

Приведенный выше код всегда считает 365 дней для каждого года. Но если вы хотите учитывать високосные годы, вам нужно будет добавить еще один для каждого високосного года:

import calendar
from django.utils import timezone

year_1 = dateRenewed.year
year_2 = year_1 + 5
leap_days = calendar.leapdays(year_1, year_2) # count leap days between two years
total_days = (365 * 5) + leap_days

delta = timezone.timedelta(days=total_days)

duedate = dateRenewed + delta

Я нашел способ сделать это.

Это с помощью

    @property
    def Shelf life(self):
        return self.dateRenewed + datetime.timedelta(days=365*5)


Вернуться на верх