将查询集的内容添加到Django / Python中的列表

j1n*_*ncx 1 python django loops list

我是Django的新手。我正在尝试遍历我的查询集,并将恰好被称为“ id”的字段添加到新列表中。

我的最终结果应该是一个看起来像这样的列表(例如):[1、2、3、7、10]

我的代码如下所示:

my_list = []

for foo in bar:
    number = foo.id
    my_list += number
Run Code Online (Sandbox Code Playgroud)

我收到此错误:TypeError:“长”对象不可迭代

foo.id的类型很长

我尝试使用以下方法将foo.id更改为int或str:

number = str(number)
Run Code Online (Sandbox Code Playgroud)

还尝试过这里的解决方案(我正在使用Python 2.7):TypeError:'long'对象不是可迭代的,但是我得到了:AttributeError:'QuerySet'对象没有属性'iteritems'

任何帮助,不胜感激!

bru*_*ers 5

至于您的代码为何引发错误的原因:您必须使用my_list.append(number)(这my_list += anything是一个快捷方式,my_list.extends(anything)它期望可迭代,并将所有可迭代的值附加到my_list)。

现在,实际上,这里的pythonic方法将改为使用列表理解,即:

my_list = [foo.id for foo in bar]
Run Code Online (Sandbox Code Playgroud)

但是,由于它是关于Django查询集的,因此正确的解决方案是使用QuerySet.values_list()

bar = MyModel.objects.values_list("id", flat=True)
Run Code Online (Sandbox Code Playgroud)

这将导致bar遍历查询集的“ id”值。如果您确实需要一个列表,则只需传递barlist构造函数即可:

my_list = list(bar)
Run Code Online (Sandbox Code Playgroud)