Django模型DateField和输入fixture



模型文件包括:

class Foo(models.Model):
bar = models.DateTimeField()

夹具文件.json包括:

{
"model": "app.Foo",
"pk": "1",
"fields": {
"bar": "2018/4/20",
}
},

当我尝试添加带有"python manage.py loaddata"的fixture时,结果是:

django.core.serializers.base.DeserializationError: Problem installing fixture 
'C:ProjectsTestProjectappfixturesfile.json': ['“2018/4/20” value has an 
invalid format. It must be in Y
YYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']: (app.Foo:pk=1) field_value was '2018/4/20'

所以我的问题是,如何将日期格式"YYYY/MM/DD"添加到我的模型文件中?

您使用DateTimeField(例如:class Foo(models.Model): bar = models.DateField()

Djangomodels.DateFieldmodels.DateTimeField期望输入为pythondatetime对象或ISO格式(使用"-"分隔符,而不是"/"分隔符(。这不是您可以轻易更改的内容,因为它也是用于在数据库中保存值的内容。所以你想要什么是不可能的。

我看到的唯一选项是编写自己的管理命令,该命令首先解析json fixture,将日期格式更改为ISO并保存到一个新文件,然后从自己的handle()方法中调用loaddata命令。

注意:相应的表单字段forms.DateField是灵活的,可以接受各种输入格式,并允许您指定要使用的输入格式。事实上,如果您启用i18n,那么它们将接受像2020/03/12这样的国际输入格式。但这并不能真正帮助你使用loaddata,因为它根本不使用表单。

最新更新