Django не возвращает объекты при поиске по полю __date

Почему поиск по полям __date и __month не возвращает ни одного объекта?

class MembershipPlanSubscription(TimeStampBaseModel):
    user = models.ForeignKey(to=User, on_delete=models.CASCADE)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

Это хорошо известная проблема, если вы используете часовые пояса (USE_TZ = True в базе данных) и работаете с базой данных типа MySQL, которая иногда теряет данные о часовых поясах.

Вы можете (пере)загрузить информацию о часовом поясе в базу данных с помощью:

time_zone_transition /usr/share/zoneinfo | mysql -u root -p mysql

на базе данных типа Unix, где вам, возможно, придется сменить root на другого пользователя, имеющего доступ к таблицам часовых поясов в базе данных.

Возможно, вы можете использовать следующую логику и посмотреть, устранит ли она вашу проблему (с созданием объекта datetime, включающего ваш часовой пояс):

from django.utils.timezone import localtime, now

datetime_filter=localtime(now()).replace(hour=0, minute=0, second=0, 
microsecond=0, year=2024, month=2, day=12) # Or any dates/times you'd prefer

и затем используйте это datetime_filter на вашем наборе запросов:

YourModel.objects.filter(end_date__date=datetime_filter)

Или

YourModel.objects.filter(end_date__month=datetime_filter.month) # Other filters, ETC.

Если вы напечатаете datetime_filter, то увидите, что это осознанный datetime объект (включая timezone) и вам не нужно беспокоиться о разнице между вашим текущим часовым поясом и часовым поясом вашего datetime_filter:

Пример:

print(datetime_filter)
datetime.datetime(2024, 2, 2, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/Amsterdam'))
Вернуться на верх