简体   繁体   English

Django模型自定义序列化为JSON

[英]Django Model Customize Serialization to JSON

Default Serializer Implementation: 默认序列化器实现:

class Serializer(base.Serializer):
    """
    Serializes a QuerySet to basic Python objects.
    """

    internal_use_only = True

    def start_serialization(self):
        self._current = None
        self.objects = []

    def end_serialization(self):
        pass

    def start_object(self, obj):
        self._current = {}

    def end_object(self, obj):
        self.objects.append({
            "model"  : smart_unicode(obj._meta),
            "pk"     : smart_unicode(obj._get_pk_val(), strings_only=True),
            "fields" : self._current
        })
        self._current = None

Data Output Format: 数据输出格式:

[{"pk": 2, "model": "android.job", "fields": {"status": "lol", "customer": "HAHA"}}, {"pk": 3, "model": "android.job", "fields": {"status": "lul", "customer": "BWAHA"}}] [{“ pk”:2,“ model”:“ android.job”,“ fields”:{“ status”:“ lol”,“ customer”:“ HAHA”}},{“ pk”:3,“ model “:” android.job“,” fields“:{” status“:” lul“,” customer“:” BWAHA“}}]

My overriding: 我的首要任务:

class MySerialiser(Serializer):
    def start_serialization(self):
        self._current = None
        self.objects = []

    def end_serialization(self):
        pass

    def start_object(self, obj):
        self._current = {}

    def end_object(self, obj):
        self._current['id'] = obj._get_pk_val()
        self.objects.append(self._current)

Output Format: 输出格式:

{"status": "lol", "customer": "HAHA", id:2L}{"status": "lul", "customer": "BWAHA", id:3L} {“状态”:“ lol”,“客户”:“ HAHA”,id:2L} {“状态”:“ lul”,“客户”:“ BWAHA”,id:3L}

What I need: 我需要的:

[{"status": "lol", "customer": "HAHA", id:2L}, {"status": "lul", "customer": "BWAHA", id:3L}] [{“状态”:“大声笑”,“客户”:“ HAHA”,id:2L},{“状态”:“ lul”,“客户”:“ BWAHA”,id:3L}]

Note - This is in Django - all of these are of type String! 注意-这是在Django中-所有这些都是String类型! Don't assume they are lists/dicts 不要以为它们是列表/字典

This worked finally! 终于成功了!

class MySerialiser(Serializer):
    def start_serialization(self):
        self._current = None
        self.objects = []

    def end_serialization(self):
        simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)

    def getvalue(self):
        if callable(getattr(self.stream, 'getvalue', None)):
            return self.stream.getvalue()

    def start_object(self, obj):
        self._current = {}

    def end_object(self, obj):
        self._current['id'] = obj._get_pk_val()
        self.objects.append(self._current)
        self._current = None

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM