在我序列化之前,我正在尝试向Django结果对象添加一个或两个属性。我的Python技能相当薄弱,所以我们走了。
我想这样做:
products = Product.objects.all()
products.totalPages = 10
products.currentPage = 1
data = serializers.serialize('json', products)
不尝试添加totalPages和currentPage属性,此代码可以正常工作。但我想添加这些属性,以便将一个漂亮的JSON对象传递回客户端。
有什么想法吗?
答案 0 :(得分:6)
不确定您希望那些attrs进入序列化返回的“列表”。也许您希望数据成为最终结果中的关键字:
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
中的代码经过高度优化,但我不太确定如何使用自定义属性等。在过去,我刚刚在我的模型类上创建了一个方法/属性,它将实例中的数据转换为包含我想要的dict。所以,而不是
data = json.loads(serializers.serialize('json', products))
你可以使用(假设你已经在Product上定义了一个方法,as_dict
):
data = [p.as_dict() for p in products]
答案 1 :(得分:0)
在黑暗中未经测试的射击......
data = serializers.serialize('json', {'total':10,'current':1,'products':list(products)})