我是Django的新手。我正在尝试遍历我的查询集,并将恰好被称为“ id”的字段添加到新列表中。
我的最终结果应该是一个看起来像这样的列表(例如):[1、2、3、7、10]
我的代码如下所示:
my_list = []
for foo in bar:
number = foo.id
my_list += number
我收到此错误:TypeError:“长”对象不可迭代
foo.id的类型很长
我尝试使用以下方法将foo.id更改为int或str:
number = str(number)
还尝试过这里的解决方案(我正在使用Python 2.7):TypeError: 'long' object is not iterable,但我得到了:AttributeError:'QuerySet'对象没有属性'iteritems'
任何帮助,不胜感激!
最佳答案
至于为什么代码会引发错误:您必须使用my_list.append(number)
(my_list += anything
是my_list.extends(anything)
的快捷方式,它需要一个iterable并将所有此迭代器的值附加到my_list
)。
现在,实际上,这里的pythonic方法将改为使用list comprehension,即:
my_list = [foo.id for foo in bar]
但是,因为它是关于Django查询集的,所以正确的解决方案是使用
QuerySet.values_list()
:bar = MyModel.objects.values_list("id", flat=True)
这将导致
bar
在查询集的“ id”值上是可迭代的。如果确实需要列表,则只需将bar
传递给list
构造函数:my_list = list(bar)
关于python - 将查询集的内容添加到Django/Python中的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41262785/