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'
任何帮助,不胜感激!
至于您的代码为何引发错误的原因:您必须使用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”值。如果您确实需要一个列表,则只需传递bar给list构造函数即可:
my_list = list(bar)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |