我需要将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
的序列化(它在python json
模块中是硬编码的)。
现在list
文章按{I} serialize_full
序列化,而不是serialize_short
方法。