如何在序列化模型Django中格式化日期时间

时间:2017-12-20 05:50:48

标签: django python-2.7 datetime django-models datetime-format

我有以下型号

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返回以下格式:

2017-12-19T22:50:04.328Z

所需格式为:

2017-12-19 22:50:04

有没有一种简单的方法可以在不使用queryset.values()和queryset.extra()方法的情况下实现这一目的?

2 个答案:

答案 0 :(得分:0)

您需要创建自己的DjangoJSONEncoder子类 - 这是Python标准JSON编码器的子类,它实现了您希望更改的功能(除其他外)。

如果你看一下the source code,这是非常微不足道的。您需要更改以:

开头的部分
    if isinstance(o, datetime.datetime):

让方法以您希望的格式返回日期时间。

class MyJSONEncoder(DjangoJSONEncoder):
    def default(self, o):        
        if isinstance(o, datetime.datetime):
            # Your implementation here
        return super().default(o)

答案 1 :(得分:0)

正如飞机所建议的那样,我在前端使用JavaScript内置的Date实现(直到现在才了解它)。它非常适合处理格式和区域设置。

具体来说,我使用了这个对象函数:Date.prototype.toLocaleFormat