gpt4 book ai didi

python - 向 Django 结果对象添加属性

转载 作者:行者123 更新时间:2023-11-28 21:29:38 24 4
gpt4 key购买 nike

我试图在序列化之前向 Django 结果对象添加一两个属性。我的 Python 技能相当薄弱,所以我们开始吧。

我想做的事:

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

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

有什么想法吗?

最佳答案

不确定您希望这些属性在序列化返回的“列表”中的哪个位置。也许您希望数据在最终结果中成为关键:

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]

关于python - 向 Django 结果对象添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com