Django对象序列化和自定义日期格式

时间:2014-01-07 10:37:18

标签: python django

所以我使用这段代码将Django对象序列化为JSON格式(所以我可以通过Celery发送给RabbitMQ):

import django.core.serializers as serializers
import json

def serialize(obj):
    d = json.loads(serializers.serialize('json', [obj]).strip('[]'))
    filtered_fields = {
        'id': d['pk'],
    }
    for key, value in d['fields'].iteritems():
        filtered_fields[underscore_to_camelcase(str(key))] = value
    return filtered_fields

返回类似于:

的内容
{
    "firstName": "Foo",
    "lastName": "Bar",
    "createdAt": "2013-12-15T20:53:59.615",
    "updatedAt": "2013-12-15T20:53:59.615",
    "dateOfBirth": "1990-05-17",
    "id": "foo@bar.com"
}

有没有办法告诉Django序列化程序将日期时间对象转换为Zulu格式?所以而不是:

2013-12-15T20:53:59.615

我想:

2013-12-15T20:53:59Z

1 个答案:

答案 0 :(得分:0)

如果您使用django的simplejson进行序列化,您可以执行以下操作:

simplejson.dumps(data, cls=LazyEncoder)

并让LazyEncoder处理特殊情况,例如翻译和你的案例datetimeformat:

class LazyEncoder(simplejson.JSONEncoder):
    def default(self, obj):
        elif isinstance(obj, datetime.datetime):
            return #your formatting goes here

唯一的问题是simplejson.dumps返回字符串。但是如果你研究一下,那么也许你可以为你的目的使用相同的lazyencoder(https://docs.djangoproject.com/en/dev/topics/serialization/#id2)。这里只是一个想法 - 我没有必要深入研究这个,所以我不确定这对你有用吗<​​/ p>