我需要将 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
我想要的方法。