Как рассчитать срок исполнения в 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)