1

我需要将 django 模型序列化为 json 格式,所以我为完整版本和短版本(用于优化列表)编写了自定义方法,例如

class Article(models.Model):
    def serialize_full(self):
        return {
            'title': self.title,
            'absolute_url': self.get_absolute_url(),
            'content': self.content, 
            ...  # many heavy fields 
        }

    def serialize_short(self):        
        return {
            'title': self.title,
            'absolute_url': self.get_absolute_url(),
        }

然后我重新定义了默认编码器

class JSONEncoder(DjangoJSONEncoder):

    def default(self, obj):
        if isinstance(obj, QuerySet):
            return [o.serialize_short() for o in obj]
        if isinstance(obj, models.Model):
            return obj.serialize_full()
        return super(JSONEncoder, self).default(obj)

*这是我的代码的较短版本,以显示主要思想。

但是这样我就不能重新定义list(它在pythonjson模块中硬编码)的序列化。现在list的文章是由 序列化的serialize_full,而不是serialize_short我想要的方法。

4

0 回答 0