У меня есть поле в одной модели, как:
class Sample(models.Model):
    date = fields.DateField(auto_now=False)
Теперь мне нужно отфильтровать объекты по диапазону дат.
 Как отфильтровать все объекты с датой с 1-Jan-2011 31-Jan-2011?
У меня есть поле в одной модели, как:
class Sample(models.Model):
    date = fields.DateField(auto_now=False)
Теперь мне нужно отфильтровать объекты по диапазону дат.
 Как отфильтровать все объекты с датой с 1-Jan-2011 31-Jan-2011?
Используйте
Sample.objects.filter(date__range=["2011-01-01", "2011-01-31"])
Или, если вы просто пытаетесь отфильтровать месяц:
Sample.objects.filter(date__year='2011', 
                      date__month='01')
Как сказал Бернхард Валлант, если вам нужен запрос, который исключает specified range ends, вы должны рассмотреть его решение, в котором используется gt/lt (больше или меньше -than).
Вы можете использовать django filter с datetime.date objects:
import datetime
samples = Sample.objects.filter(sampledate__gte=datetime.date(2011, 1, 1),
                                sampledate__lte=datetime.date(2011, 1, 31))
При выполнении диапазонов django с фильтром убедитесь, что вы знаете разницу между использованием объекта даты и объекта datetime. __range включен по датам, но если вы используете объект даты и времени для конечной даты, он не будет включать записи для этого дня, если время не установлено.
    startdate = date.today()
    enddate = startdate + timedelta(days=6)
    Sample.objects.filter(date__range=[startdate, enddate])
возвращает все записи от startdate до enddate, включая записи в эти даты. Плохой пример, поскольку это возвращает записи в неделю в будущее, но вы получаете дрейф.
    startdate = datetime.today()
    enddate = startdate + timedelta(days=6)
    Sample.objects.filter(date__range=[startdate, enddate])
будет отсутствовать запись за 24 часа в зависимости от того, на какое время установлены поля даты.
Вы можете обойти "несоответствие импеданса", вызванное отсутствием точности в сравнении с объектом DateTimeField/date, которое может возникнуть при использовании  диапазона - с использованием  datetime. timedeltastrong > , чтобы добавить день к последней дате в диапазоне. Это работает как:
start = date(2012, 12, 11)
end = date(2012, 12, 18)
new_end = end + datetime.timedelta(days=1)
ExampleModel.objects.filter(some_datetime_field__range=[start, new_end])
Как обсуждалось ранее, без выполнения чего-либо подобного, записи игнорируются в последний день.
Отредактировано, чтобы избежать использования datetime.combine - кажется более логичным придерживаться экземпляров даты при сравнении с DateTimeField, вместо того, чтобы возиться с отбрасывающими (и запутывающими) объектами datetime. См. Дальнейшее объяснение в комментариях ниже.
Это просто,
YourModel.objects.filter(YOUR_DATE_FIELD__date=timezone.now())
Работает для меня
Чтобы сделать его более гибким, вы можете создать FilterBackend, как показано ниже:
class AnalyticsFilterBackend(generic_filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        predicate = request.query_params # or request.data for POST
        if predicate.get('from_date', None) is not None and predicate.get('to_date', None) is not None:
            queryset = queryset.filter(your_date__range=(predicate['from_date'], predicate['to_date']))
        if predicate.get('from_date', None) is not None and predicate.get('to_date', None) is None:
            queryset = queryset.filter(your_date__gte=predicate['from_date'])
        if predicate.get('to_date', None) is not None and predicate.get('from_date', None) is None:
            queryset = queryset.filter(your_date__lte=predicate['to_date'])
        return queryset
Все еще актуально сегодня. Вы также можете сделать:
import dateutil
import pytz
date = dateutil.parser.parse('02/11/2019').replace(tzinfo=pytz.UTC)