将属性添加到Django结果对象

时间:2011-03-01 02:16:28

标签: python django

在我序列化之前,我正在尝试向Django结果对象添加一个或两个属性。我的Python技能相当薄弱,所以我们走了。

我想这样做:

products = Product.objects.all()
products.totalPages = 10
products.currentPage = 1
data = serializers.serialize('json', products)

不尝试添加totalPages和currentPage属性,此代码可以正常工作。但我想添加这些属性,以便将一个漂亮的JSON对象传递回客户端。

有什么想法吗?

2 个答案:

答案 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)})