将对象属性值添加到Django数组中

3
我是一名新手,正在使用Django进行我的第一个项目。我遇到了一个问题,不太理解,并且(也许我没有使用正确的搜索术语)在寻找解决方案时没有找到任何相关结果。
我试图获取模型中“topic”字段中不同条目的数组。当我在shell中尝试弄清楚这个问题时,我得到了以下意外的结果。
这是我在shell中输入的内容:
>>> from pomodoro.models import Chunk, Result
>>> Chunk.objects.all()
<QuerySet [<Chunk: Onboard State Estimation>, <Chunk: Newton's 2nd Law of Motion>, <Chunk: IF>]>
>>> a = []
>>> for q in Chunk.objects.all(): a += q.topic
...
>>> a
['R', 'o', 'b', 'o', 't', 'i', 'c', 's', 'M', 'e', 'c', 'h', 'a', 'n', 'i', 'c', 's', 'L', 'o', 'g', 'i', 'c']
>>> ose = Chunk.objects.get(pk=1)
>>> ose.topic
'Robotics'

我不明白为什么我得到了一个由单个字母组成的数组,而不是由“主题”字符串组成的数组。有人能解释一下这是为什么吗?

我知道有更好的方法可以实现我想要做的事情,但作为一个初学者,我还没有完全掌握Django。


1
使用a.append(q.topic)代替a += q.topic或者a += [q.topic] - slackmart
有道理,谢谢你。 - Era
1个回答

2
尝试使用追加方法而非 a += q.topic
a.append(q.topic)

或者:

a += [q.topic]

原因在于字符串对象是可迭代的,Python会迭代并将项目附加到您的列表中。因此,迭代'Robotics'将给您['R', 'o', 'b', 'o', 't', 'i', 'c', 's']
因此,如果您指定单个列表值[q.topic],则Python将在for循环的每次迭代中附加q.topic的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接