我是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 += anythingmy_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/

10-13 04:39