我是 Django 的新手。我正在尝试遍历我的查询集并将恰好称为每个查询集的字段添加到新列表中。
我的最终结果应该是一个看起来像这样的列表(例如):[1, 2, 3, 7, 10]
我的代码是这样的:
my_list = []
for foo in bar:
number = foo.id
my_list += number
我收到这个错误:TypeError: 'long' object is not iterable
foo.id的类型是long
我尝试使用以下方法将 foo.id 更改为 int 或 str:
number = str(number)
也尝试过这里的解决方案(我使用的是 Python 2.7):TypeError: 'long' object is not iterable但我明白了:AttributeError: 'QuerySet' object has no attribute '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)
