我有一个包含数据库迁移的django项目。
MyModel.my_field
表示基于模型MyModel
django 1.8 - DateTimeField在测试期间接收本地日期时间RuntimeWarning
的初始迁移有幼稚日期时间作为默认值的DateTimeField字段(即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.
起初我还以为我疯了,但没有找到我在那里设置一个天真的日期时间。但是我运行了一个虚拟测试(即与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),
),
]
编辑
继@尚旺建议下面我跑用--verbosity 2.进行测试我能够看到导致此问题的特定迁移。 基本上在初始和最后一次迁移之间DateTimeField
得到了auto_now_add
属性设置为True
。我认为这很奇怪,并且压扁的迁移应该解决这个问题。
我再次压扁了迁徙,它不再发出警告。我没有解释为什么我以为我第一次看到RuntimeWarning第一次创建了压扁的migratons
你可以做'。/manage.py test --verbosity 2'并查看django是否会在测试开始时开始应用迁移? –
多么伟大的建议!我现在可以看到导致问题的具体迁移。请参阅我的编辑更新。 –
如果你想你可以留下一个答案,我会接受它。谢谢 –