При миграции "make_aware ожидает наивное время даты".

Я разработал приложение на Django. Оно прекрасно работает на моем компьютере с sqlite бэкендом.

Но когда я пытаюсь начать работу с сервером linux и бэкендом mysql, я получаю следующую ошибку при первой миграции.

В настройках-

USE_TZ = True

Я выполнил mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql также как django doc.

Я использую django 4.1.3 и mysql community 8.0.30

Заранее спасибо.

Столкнулся с той же проблемой. В какой-то момент django предполагает, что данные не зависят от часового пояса без проверки. Вот обходной путь.

Обновите функцию make_aware, которая указана в вашем стек-трассе здесь:

/var/www/bulkmailer-folder/env-bulkmailer/lib64/python3.9/site-packages/django/utils/timezone.py", line 291, in make_aware

Вместо того, чтобы выдавать ошибку, если значение уже известно, просто верните известное значение. Смотрите последний оператор else ниже.

def make_aware(value, timezone=None, is_dst=NOT_PASSED):
    """Make a naive datetime.datetime in a given time zone aware."""
    if is_dst is NOT_PASSED:
        is_dst = None
    else:
        warnings.warn(
            "The is_dst argument to make_aware(), used by the Trunc() "
            "database functions and QuerySet.datetimes(), is deprecated as it "
            "has no effect with zoneinfo time zones.",
            RemovedInDjango50Warning,
        )
    if timezone is None:
        timezone = get_current_timezone()
    if _is_pytz_zone(timezone):
        # This method is available for pytz time zones.
        return timezone.localize(value, is_dst=is_dst)
    else:
        # Check that we won't overwrite the timezone of an aware datetime.
        if is_aware(value):
            # ADD THIS
            return value
            # REMOVE THE FOLLOWING LINE
            # raise ValueError("make_aware expects a naive datetime, got %s" % value)
        # This may be wrong around DST changes!
        return value.replace(tzinfo=timezone)
Вернуться на верх