У меня есть проект django с миграциями баз данных.
MyModel.my_field
представляет собой DateTimeField на модели MyModel
django 1.8 - DateTimeField получает встроенное datetime RuntimeWarning во время тестирования
Начальная миграция имела наивные DateTime в качестве значения по умолчанию (т.е. datetime.datetime.now
)
Новая миграция теперь как django.utils.timezone.now
Я не загружать любые светильники в рамках миграция
Всякий раз, когда я проверяю проект, я получаю это предупреждение.
.../django/db/models/fields/__init__.py:1474: RuntimeWarning: DateTimeField MyModel.my_field received a naive datetime (2015-05-26 05:10:33) while time zone support is active.
Сначала я подумал, что я сумасшедший и не могу найти, где я устанавливал наивное datetime. Но я проверил фиктивный тест (т. Е. Тестовый файл, не имеющий ничего общего с MyModel, который ничего не сделал), и я все еще получил предупреждение.
Это заставило меня поверить, что проблема возникла из-за начальной миграции, когда django создает базу данных. Я попытался выполнить сквош миграции и повторить тесты, но я все равно получаю такое же предупреждение.
Где я должен искать?
Я попытался превратить предупреждения в исключения, как указано в документах, но это просто показалось, что это произошло при создании базы данных.
import warnings
warnings.filterwarnings(
'error', r"DateTimeField .* received a naive datetime",
RuntimeWarning, r'django\.db\.models\.fields')
соответствующая часть первоначальной миграции:
migrations.CreateModel(
name='MyModel',
fields=[
('my_field', models.DateTimeField(default=datetime.datetime.now)),
],
options={
},
bases=(models.Model,),
),
миграция, где мы изменить значение по умолчанию
class Migration(migrations.Migration):
dependencies = [
('myapp', '0003_auto_20150101_2018'),
]
operations = [
migrations.AlterField(
model_name='mymodel',
name='my_field',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]
EDIT
После @ шан-вана предложение ниже я побежал тест с --verbosity 2. Мне удалось увидеть конкретную миграцию, вызвавшую проблему. В основном между начальной и последней миграцией DateTimeField
получил атрибут auto_now_add
, установленный на True
. Я думал, что это странно, и что раздавленная миграция должна была исправить это.
Я снова раздавил миграцию, и он больше не бросает предупреждение. У меня нет объяснений, почему я думал, что видел RuntimeWarning в первый раз, когда я создал смятые мигареты
Можете ли вы сделать./manage.py test --verbosity 2' и посмотреть, начнет ли django применять миграцию при запуске теста? –
какое большое предложение! Теперь я вижу конкретную миграцию, вызывающую проблему. PLS см. мое редактирование для обновления. –
, если вы хотите, вы можете оставить ответ, и я приму его. благодаря –