Django RuntimeWarning: DateTimeField получил наивное datetime - PullRequest
1 голос
/ 19 января 2020

Я докеризую свое Django приложение. Поскольку я изменил свою базу данных с SQLite на Postgres, миграция завершается неудачно, и я получаю эту ошибку:

RuntimeWarning: DateTimeField Posts.created_at received a naive datetime (2020-01-19 14:26:30.893128) while time zone support is active.
  warnings.warn("DateTimeField %s received a naive datetime (%s)"
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.CannotCoerce: cannot cast type time without time zone to timestamp with time zone
LINE 1: ..." TYPE timestamp with time zone USING "created_at"::timestam...

Я искал другие проблемы и пытался это исправить { ссылка }
Я использовал datetime.now(), затем я изменил его на timezone.now(), но я все еще получаю ту же ошибку. Это соответствующие строки из models.py

from django.utils import timezone

class Posts(models.Model):
    created_at = models.DateTimeField(default=timezone.now(), blank=True)

1 Ответ

1 голос
/ 19 января 2020

Я использовал datetime.now(), затем я изменил его на timezone.now(), но все равно получаю ту же ошибку.

Изменение модели не изменить файл миграции. Вы должны посмотреть, какие файлы миграции содержат datetime.now(), и удалить это (вместе со всеми другими миграциями, которые зависят от этого).

Более того, использование default=timezone.now() - это , а не хорошая идея , По умолчанию будет использоваться время, когда вы запустите веб-сервер. Таким образом, это означает, что если сервер работает в течение двух дней, отметка времени все равно будет использовать отметку времени в два дня go.

Однако DateTimeField имеет auto_now_add=… [Django -doc] для автоматического использования метки времени при добавлении объекта:

class Post(models.Model):
    created_at = models.DateTimeField(<b>auto_now_add=True</b>)

Это установит для поля значение blank=True, а также editable=False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...