[英]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
属性的内容,而丢弃了本应包含的额外的pk
和model
属性:
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.