繁体   English   中英

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

[英]Storing and retrieving a list of integers in sqlite using django

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

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

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

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

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

注意:根据这里的建议,我目前拥有以下视图代码,仅返回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框架。

虽然没有描述确切的情况,但是文档中的此提示使我怀疑,当serializers.serialize(...)随后读取时,我从int包含字符串的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM