Установка часового пояса для подключения к django
Проблема:
Временной пояс Postgresql установлен на 'UTC'
/etc/postgresql/15/main/conf.d/local.conf:
log_timezone = Europe/Warsaw
timezone = UTC
база данных была изменена:
ALTER DATABASE example_database SET TIMEZONE TO 'Europe/Warsaw';
Пользователь Postgresql установил собственный часовой пояс
SELECT rolconfig FROM pg_roles WHERE rolname = 'someuser';
{TimeZone=Europe/Warsaw}
settings.py
USE_TZ = True
TIME_ZONE = 'Europe/Warsaw'
но при подключении postgresql получает:
LOG: statement: SELECT set_config('TimeZone', 'UTC', false)
Что я делаю не так???
НАШЕЛ!!!
Я глубоко погрузился в библиотеки postgresql и нашел следующее:
/site-packages/django/db/backends/base/base.py:
def timezone(self):
"""
Return a tzinfo of the database connection time zone.
This is only used when time zone support is enabled. When a datetime is
read from the database, it is always returned in this time zone.
When the database backend supports time zones, it doesn't matter which
time zone Django uses, as long as aware datetimes are used everywhere.
Other users connecting to the database can choose their own time zone.
When the database backend doesn't support time zones, the time zone
Django uses may be constrained by the requirements of other users of
the database.
"""
if not settings.USE_TZ:
return None
elif self.settings_dict["TIME_ZONE"] is None:
return datetime.timezone.utc
else:
return zoneinfo.ZoneInfo(self.settings_dict["TIME_ZONE"])
А решение таково:
settings.py:
DATABASES = {
'default': {
# Add 'postgresql_psycopg2','postgresql', 'mysql', 'sqlite3' or 'oracle'.
'ENGINE': 'django.db.backends.postgresql_psycopg2',
# Or path to database file if using sqlite3.
'NAME': env('DATABASE_NAME'),
# Not used with sqlite3.
'USER': env('DATABASE_USER'),
# Not used with sqlite3.
'PASSWORD': env('DATABASE_PASSWORD'),
# Set to empty string for localhost. Not used with sqlite3.
'HOST': env('DATABASE_HOST', default='127.0.0.1'),
# Set to empty string for default.
'PORT': env('DATABASE_PORT', default='5432'),
'TIME_ZONE': 'Europe/Warsaw',
# Not used with sqlite3.
},
посмотрите на дополнительный параметр 'TIME_ZONE': 'Europe/Warsaw' в настройках баз данных....