如何在序列化模型 Django 中格式化日期时间
How to format datetime in a serialized model Django
我有以下型号
class MyModel(models.Model):
firstDate = models.DateTimeField(auto_now_add=True)
another = models.CharField(max_length=30)
我用
将它序列化为JSON
query = MyModel.objects.all()
data = serializers.serialize('json', query, use_natural_foreign_keys=True)
DateTimeField returns格式如下:
2017-12-19T22:50:04.328Z
所需格式为:
2017-12-19 22:50:04
有没有不使用 queryset.values() 和 queryset.extra() 方法的简单方法来实现此目的?
您需要创建自己的 DjangoJSONEncoder 子类 - 这是 Python 标准 JSON 编码器的子类,它实现了(除其他外)功能你想改变:
如果您查看 the source code,那是非常微不足道的。您需要更改以以下内容开头的部分:
if isinstance(o, datetime.datetime):
让方法 return 以您想要的格式显示日期时间。
class MyJSONEncoder(DjangoJSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
# Your implementation here
return super().default(o)
按照飞机的建议,我在前端使用 JavaScript 内置 Date 实现(直到现在才知道)。它非常适合处理格式和语言环境。
具体来说,我使用了这个对象函数:Date.prototype.toLocaleFormat
我有以下型号
class MyModel(models.Model):
firstDate = models.DateTimeField(auto_now_add=True)
another = models.CharField(max_length=30)
我用
将它序列化为JSON query = MyModel.objects.all()
data = serializers.serialize('json', query, use_natural_foreign_keys=True)
DateTimeField returns格式如下:
2017-12-19T22:50:04.328Z
所需格式为:
2017-12-19 22:50:04
有没有不使用 queryset.values() 和 queryset.extra() 方法的简单方法来实现此目的?
您需要创建自己的 DjangoJSONEncoder 子类 - 这是 Python 标准 JSON 编码器的子类,它实现了(除其他外)功能你想改变:
如果您查看 the source code,那是非常微不足道的。您需要更改以以下内容开头的部分:
if isinstance(o, datetime.datetime):
让方法 return 以您想要的格式显示日期时间。
class MyJSONEncoder(DjangoJSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
# Your implementation here
return super().default(o)
按照飞机的建议,我在前端使用 JavaScript 内置 Date 实现(直到现在才知道)。它非常适合处理格式和语言环境。
具体来说,我使用了这个对象函数:Date.prototype.toLocaleFormat