Класс DateMixin (Django 3.2)

from django.views.generic.dates import DateMixin

Mixin class for views manipulating date-based data.

Attributes

  Defined in
allow_future = False DateMixin
date_field = None DateMixin
uses_datetime_field = <django.utils.functional.cached_property object at 0x7f3e5eb0ad90> DateMixin

Methods

Return `True` if the view should be allowed to display objects from the future.

def get_allow_future(self):
    """
    Return `True` if the view should be allowed to display objects from
    the future.
    """
    return self.allow_future

Get the name of the date field to be used to filter by.

def get_date_field(self):
    """Get the name of the date field to be used to filter by."""
    if self.date_field is None:
        raise ImproperlyConfigured("%s.date_field is required." % self.__class__.__name__)
    return self.date_field

Convert a date into a datetime when the date field is a DateTimeField. When time zone support is enabled, `date` is assumed to be in the current time zone, so that displayed items are consistent with the URL.

def _make_date_lookup_arg(self, value):
    """
    Convert a date into a datetime when the date field is a DateTimeField.
    When time zone support is enabled, `date` is assumed to be in the
    current time zone, so that displayed items are consistent with the URL.
    """
    if self.uses_datetime_field:
        value = datetime.datetime.combine(value, datetime.time.min)
        if settings.USE_TZ:
            value = timezone.make_aware(value)
    return value

Get the lookup kwargs for filtering on a single date. If the date field is a DateTimeField, we can't just filter on date_field=date because that doesn't take the time into account.

def _make_single_date_lookup(self, date):
    """
    Get the lookup kwargs for filtering on a single date.
    If the date field is a DateTimeField, we can't just filter on
    date_field=date because that doesn't take the time into account.
    """
    date_field = self.get_date_field()
    if self.uses_datetime_field:
        since = self._make_date_lookup_arg(date)
        until = self._make_date_lookup_arg(date + datetime.timedelta(days=1))
        return {
            '%s__gte' % date_field: since,
            '%s__lt' % date_field: until,
        }
    else:
        # Skip self._make_date_lookup_arg, it's a no-op in this branch.
        return {date_field: date}