我想在序列化之前向Django结果对象添加一个或两个属性.我的Python技能相当薄弱,所以我们走了.
我想要做:
products = Product.objects.all()
products.totalPages = 10
products.currentPage = 1
data = serializers.serialize('json', products)
Run Code Online (Sandbox Code Playgroud)
在不尝试添加totalPages和currentPage属性的情况下,此代码可以正常工作.但我想添加这些属性,以便将一个漂亮的JSON对象传递回客户端.
有什么想法吗?
不知道你希望那些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)
Run Code Online (Sandbox Code Playgroud)
也许你可以在聚合和注释中找到用法:http://docs.djangoproject.com/en/dev/topics/db/aggregation/
更新:请注意默认序列化程序的行为可能不是您想要的.代码django.utils.simplejson.encoder是高度优化的,但我不太确定如何使用自定义属性等.在过去,我刚刚在我的模型类上创建了一个方法/属性,它将实例中的数据转换为包含我想要的dict.所以,而不是
data = json.loads(serializers.serialize('json', products))
Run Code Online (Sandbox Code Playgroud)
你可以使用(假设你已经as_dict在Product上定义了一个方法):
data = [p.as_dict() for p in products]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2962 次 |
| 最近记录: |