Вычисление разницы между двумя полями даты в Django Model
У меня есть два поля datefields в модели Django, start_date и end_date. Я хочу вычислить и сохранить общее количество дней между этими двумя полями, которое будет использоваться вместе с ежедневной платой для возврата общей стоимости.
models.py
class Booking(models.Model):
"""Stores the bookings, for example when it was made, the booking date, and the car ID."""
# Unique ID for this booking.
start_date = models.DateField(default=timezone.now)
end_date = models.DateField(null=True)
В большинстве ответов рекомендуется извлекать функцию days (используя start_date.day), но это не работает. Если бронирование начинается 30 ноября, а заканчивается 2 декабря, функция вернет 28 дней, потому что она вычитает только целые числа.
Используя простое сложение и вычитание:
duration = end_date - start_date
возвращает ошибку:
TypeError: Неподдерживаемый тип(ы) операнда для -: 'DateField' и 'DateField'
Я пробовал использовать функцию, вложенную в модель, которая вычитает каждый день из end_date, пока не достигнет start_date:
def get_total_days(self):
"""Computes total number of days car will be rented from with a basic While loop."""
# Create separate instances of start and end day so as not to tamper with db values.
start_day = self.start_date
end_day = self.end_date
days = 0
while end_day > start_day:
days += 1
end_day -= 1
return days
Но это вызывает ошибку:
Значение исключения: неподдерживаемый тип(ы) операнда для -=: 'datetime.date' и 'int'
Можете ли вы помочь с этим?
Добавьте метод или свойство, которое вычитает даты экземпляра :
@property
def duration(self):
return (self.end_date - self.start_date).days