首页 > 解决方案 > 获取两个日期之间的天数

问题描述

我不知道如何获得两个日期之间的天数:这是我拥有的模型:

class Reservation(models.Model):
    """A typical class defining a reservation model."""

    # Fields
    id_reservation = models.BigAutoField(primary_key=True)
    start_date = models.DateField(auto_now=False, auto_now_add=False)
    end_date = models.DateField(auto_now=False, auto_now_add=False)
    client_id = models.ForeignKey(Client, on_delete=models.CASCADE)
    chambre_id = models.ForeignKey(Chamber, on_delete=models.CASCADE)

    # Metadata
    class Meta:
        ordering = ['-end_date']

    # Methods
    def get_absolute_url(self):
        """Returns the url to access a particular instance of MyModelName."""
        return reverse('model-detail-view', args=[str(self.id_reservation)])

    def __str__(self):
        return self.id_reservation

并尝试在我的通用视图中计算 end_date 和 start_date 之间的天数:

class ReservationsListView(generic.ListView):
    """ReservationsListView: produce a list of all Reservations """
    model = Reservation

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['periode'] = Reservation.end_date-Reservation.start_date
        return context

可以请帮助这样做。

标签: djangodjango-views

解决方案


您可以将两个对象相减date,然后获得.days属性,因此:

class Reservation(models.Model):
    # …
    
    @property
    def days(self):
        return (self.end_date - self.start_date).days

因此,这将返回以天为单位的差异,这意味着如果我们计算今天和昨天之间的差异,这将导致一天:

>>> (date(2021, 4, 28) - date(2021, 4, 27)).days
1

如果要考虑这两天,则将结果增加 1:

class Reservation(models.Model):
    # …
    
    @property
    def days(self):
        return (self.end_date - self.start_date).days + 1

Reservation 因此,您可以使用以下方法从对象中检索天数:

my_reservation.days

推荐阅读