从querys中计算列表元素

2024-10-06 12:08:44 发布

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

我从将数据保存到charfield的模型中获得一个查询集。charfield在表单上显示为MultipleChoiceField,其中有一个CheckboxSelectMultiple小部件。最多可选择5个。在

我想计算查询集中的元素数。每个查询集可以在列表中元素的数量上有所不同。现在,当我得到列表的len时,值是元素数量的5倍。口述中的列表不是列表而是其他东西吗?当我不使用queryset手动创建一个列表并获得所述列表的len时,该值是正确的。E、 有3个元素的列表返回3。在

query = MyModel.objects.all().values('myvalue')

print(query[0])
{'myvalue': "['3']"}
print(query[1])
{'myvalue': "['1', '4']"}

print(query[0]['myvalue']
['3']
print(query[1]['myvalue']
['1', '4']

print(len(query[0]['myvalue']))
5

print(len(query[1]['myvalue']))
10

Tags: 数据模型元素表单列表数量len部件
2条回答

如果使用charfield来存储数据,那么存储时的所有内容都将转换为char,因此不能直接对其使用len。 如果使用postgres作为数据库后端,则可以使用JSONField或ListField。 如果必须使用CharField或TextField,则需要先将其转换回原处。您可以创建一个继承自TextField的自定义字段,该字段将在您使用它的任何位置或仅使用json.loads()从数据库加载数据后

使用ast module将字符串列表转换为list对象并获得len

import ast

a = ast.literal_eval("['3']")      #print(len(ast.literal_eval(query[0]['myvalue'])))
b = ast.literal_eval("['1', '4']")
print len(a)  # returns 1
print len(b)  # returns 2

相关问题 更多 >