如何在序列化模型 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