Вычисление разницы между двумя полями даты в 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
Вернуться на верх