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

2024-04-26 08:04:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Django中设计一个jsonapi原型(最终实现将是一些嵌入的东西,比如Civet),以便测试更高级别的应用程序。我需要保存表单的数据:

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

整数对硬件来说意味着什么-它们与数据库中的其他任何东西都不对应。你知道吗

我使用的是Django 2.1.5和Python 3.5.2。在我的模型中,someListOfIds当前定义为CharField,因此值存储为字符串"[1, 2, 7, 9]"。当我在视图中从db中检索行时,我通过json.decoder.JSONDecoder().decode方法传递该字段,该方法似乎将它转换回int列表。但是,尝试以JsonResponse的形式传递它会导致以字符串形式返回:

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

注意:根据here的建议,我当前有以下视图代码只返回fields属性的内容,丢弃了额外的pkmodel属性,否则这些属性将被包括在内:

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)

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

deStringify是:

def deStringify(self):
    decoder=json.decoder.JSONDecoder()
    self.someListOfIds = decoder.decode(self.someListOfIds)
    return self

这在很大程度上是一段一次性的代码—它只需要在一段时间内提供正确结构的数据。一个有效的解决方案,没有一个新的开始,也没有添加一个专用的REST框架,这就是我想要的。你知道吗


Tags: 数据django方法字符串self视图json属性
2条回答

虽然没有描述确切的场景,但文档中的this hint让我怀疑,当serializers.serialize(...)随后读取属性时,我从包含int列表的字符串到实际int列表的转换正在被撤消。现在,我在从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)

相关问题 更多 >