为Django结果对象添加属性
我想在把Django的结果对象转成JSON格式之前,给它添加一两个属性。不过我的Python水平不太好,所以我来请教一下。
我想做的是:
products = Product.objects.all()
products.totalPages = 10
products.currentPage = 1
data = serializers.serialize('json', products)
如果不加totalPages和currentPage这两个属性,这段代码运行得很好。但是我想加上这两个属性,这样我就可以把一个看起来不错的JSON对象返回给客户端。
有什么想法吗?
1 个回答
6
不太确定你想把那些属性放到“序列化”返回的“列表”哪里。也许你希望数据能以某个键的形式出现在最终结果中:
import json
from django.core import serializers
products = Product.objects.all()
# data is a python list
data = json.loads(serializers.serialize('json', products))
# d is a dict
d = {}
# data is a list nested in d
d['results'] = data
# more keys for d
d['totalPages'] = 10
d['currentPage'] = 1
# data is a json string representation of the dict
data = json.dumps(d)
也许你可以看看聚合和注释的用法:http://docs.djangoproject.com/en/dev/topics/db/aggregation/
更新:请注意,默认的序列化器行为可能不是你想要的。django.utils.simplejson.encoder
中的代码经过高度优化,但我不太确定你该如何让它使用自定义属性之类的。在过去,我通常会在我的模型类中创建一个方法或属性,把实例中的数据转换成一个字典,里面正好包含我想要的内容。所以,代替
data = json.loads(serializers.serialize('json', products))
你可以使用(前提是你在Product上定义了一个方法as_dict
):
data = [p.as_dict() for p in products]