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'))