gpt4 book ai didi

django - JSON 使用 simplejson 序列化 Django 模型

转载 作者:IT老高 更新时间:2023-10-28 12:48:42 25 4
gpt4 key购买 nike

我想使用 simplejson 序列化 Django 模型。 Django 的序列化程序不支持字典……而 simplejson 不支持 Django 查询集。这真是个难题。

在模型中,赞助商具有赞助商级别的外键,我试图将属于某个赞助商级别的所有赞助商分组在一起。下面是生成列表的代码:

from django.shortcuts import get_list_or_404
from special_event.models import Sponsor, SponsorLevel

sponsor_dict = {}

roadie_sponsors = get_list_or_404(Sponsor, level__category = SponsorLevel.ROADIE_CHOICE)

for item in roadie_sponsors:
try:
sponsor_dict[item.level.name].append(item)
except KeyError:
sponsor_dict[item.level.name] = [item]

这是 sponsor_dict “制作”后的样子

{
'Fan': [<Sponsor: Fan Sponsor>],
'VIP': [<Sponsor: VIP Sponsor>],
'Groupie': [<Sponsor: Groupie Sponsor>],
'Silver': [<Sponsor: Silver Sponsor>],
'Bronze': [<Sponsor: Another Bronze Sponsor>, <Sponsor: Bronze Sponsor>]
}

我只在每个级别添加了一个赞助商,除了铜牌,只是为了展示它是如何运作的。我想做的就是将它“全部”转换为 JSON,以便 jQuery 可以轻松地解释它。 Django 的其他序列化程序(如 XML 或 YAML)可以做到这一点吗?我可以“扩展”Django JSON Serializer 来处理字典或“扩展”simplejson 来处理 Django QuerySet 对象吗?

最佳答案

我会选择扩展 simplejson。基本上,您想在 JSON 编码器遇到 QuerySet 时插入 django 的序列化。你可以使用类似的东西:

from json import dumps, loads, JSONEncoder

from django.core.serializers import serialize
from django.db.models.query import QuerySet
from django.utils.functional import curry

class DjangoJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, QuerySet):
# `default` must return a python serializable
# structure, the easiest way is to load the JSON
# string produced by `serialize` and return it
return loads(serialize('json', obj))
return JSONEncoder.default(self,obj)

# partial function, we can now use dumps(my_dict) instead
# of dumps(my_dict, cls=DjangoJSONEncoder)
dumps = curry(dumps, cls=DjangoJSONEncoder)

有关 default 方法的更多信息,请查看 simplejson documentation .把它放在一个 python 模块中,然后 import dumps 就可以了。但请注意,此函数只会帮助您序列化 QuerySet 实例,而不是直接序列化 Model 实例。

关于django - JSON 使用 simplejson 序列化 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2249792/

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