使用Django在sqlite中存储和检索整数列表

时间:2019-01-30 16:33:51

标签: python django

我要在Django中建立JSON API的原型(最终实现将是诸如Civet之类的嵌入式产品),以便可以测试更高级别的应用程序。我需要保留以下形式的数据:

{
    someListOfIds: [1, 2, 7, 9]
}

整数对硬件意味着某种意义-它们与数据库中的其他任何内容都不对应。

我正在使用Django 2.1.5和Python 3.5.2。在我的模型中,someListOfIds当前定义为CharField,因此该值存储为字符串"[1, 2, 7, 9]"。当我从视图中的数据库检索行时,我将该字段通过.decode的{​​{1}}方法传递,这似乎将其转换为整数列表。然而,尝试传送它以这样的形式在json.decoder.JSONDecoder()结果在它在绳指明分数形式被返回:

JsonResponse

注意:根据here的建议,我目前拥有以下视图代码,仅返回{ someListOfIds: "[1, 2, 7, 9]" } 属性的内容,而丢弃多余的fieldspk属性否则将包括在内:

model

据我所知,是对python对象的序列化,重新引入了string-y-ness。

cfgs = [Configuration.deStringify(x) for x in Configuration.objects.all()] objs = serializers.serialize('python', cfgs) cfgs = [d['fields'] for d in objs] response = { "configurations": cfgs } return JsonResponse(response) 是:

deStringify

这是一段很简单的代码-它只需要一段时间来提供正确结构化的数据。我一直在寻找一个可行的解决方案,而无需重新开始并添加专用的REST框架。

1 个答案:

答案 0 :(得分:0)

虽然没有描述精确的场景,但是文档中的this hint让我怀疑我从整数包含字符串列表到实际整数列表的转换是serializers.serialize(...)随后读取该属性时被撤消。现在,我从python序列化结构中提取了fields属性后执行了转换,并且我的JsonResponse现在正确包含了所需的int列表。

这似乎是一项艰巨的工作,可能反映出我没有“了解” Django的工作方式,虽然它虽然不漂亮,但却可以完成工作:

decoder=json.decoder.JSONDecoder()
all = Configuration.objects.all()
objs = serializers.serialize('python', all)
# Extract the interesting part of the structure
cfgs = [d['fields'] for d in objs]
for key in ['someListOfIds', 'someOtherListOfInts', 'finalListOfInts']:
    [cfg.update({key: decoder.decode(cfg[key])}) for cfg in cfgs]
response = { "configurations": cfgs }
return JsonResponse(response)