Python 迭代查询集值

Python 迭代查询集值,python,django,Python,Django,我编写了一个小应用程序,允许用户创建自己的excel报告。我的一个查询将列表解压为.values以返回列。我遇到的问题是试图迭代/引用那些返回的值,因为我不知道报告中包含哪些值 以下是我的尝试: queryset = Claim.objects.filter(client=client, creation__year=year, creation__month=month)\ .values(*values).order_by('id') for i, c in enu

我编写了一个小应用程序,允许用户创建自己的excel报告。我的一个查询将列表解压为.values以返回列。我遇到的问题是试图迭代/引用那些返回的值,因为我不知道报告中包含哪些值

以下是我的尝试:

queryset = Claim.objects.filter(client=client, creation__year=year, creation__month=month)\
            .values(*values).order_by('id')

for i, c in enumerate(queryset):
    for ii, r in enumerate(c):
         print c
我明白了

 TypeError: 'Claim' object is not iterable

问题是enumeratec中ii,r的第五行:不能枚举模型类型

你可以在第一圈领先时退出。我不明白为什么会有第二个回路

for i, c in enumerate(queryset):
    print i, c, type(c)
你会得到这样的结果:

0 {[some dict data]} <dict>
1 {[some dict data]} <dict>
2 {[some dict data]} <dict>
3 {[some dict data]} <dict>
....

多亏了哈维尔·布齐,我才意识到自己的错误。我需要的是价值观而不是价值观

queryset = Claim.objects.filter(client=client, creation__year=year, creation__month=month)\
            .values_list(*values).order_by('id')

for i, c in enumerate(queryset):
         print q[i]
这里Bankdetails是一个虚构的模型,这里有一个简单的解决方案来迭代查询集

from django.core import serializers
object_list = serializers.serialize("python", Bankdetails.objects.all())
for object in object_list:
    for field_name, field_value in object['fields'].items():
        print (field_name,'->', field_value)
    print()
输出

要了解更多信息,请访问此处

您确定这就是您正在运行的代码吗?当您使用值时,您是在dict的queryset上迭代的,所以您不应该得到'Claim'对象不可iterable。请显示完整的回溯。例如。在第一个循环中,我迭代查询集,以便访问c.first_name并获得first_name值。由于用户在.values中传入了自己的值,因此我无法使用“c.firstname”进行引用。我正在努力想出另一种方法来引用它们,或者通过索引,或者iteration@Mantis哦,我明白你的问题了,这些值把它变成了一个dict,你不能做c.first\u name,你必须做c['first\u name']或c.get'first\u name'-但仍然是一个循环。对不起。我想我的问题不是很清楚。你确实让我记忆犹新,虽然说“值”会把它变成一个dict。这是我需要的值列表,所以我可以用c[0]表示example@Mantis如果其值为“是”,则它是一个列表,如果愿意,则会丢失所有标题。你必须自己记录下来,这可能会有点麻烦。因此,您希望在数据集上循环,然后逐个循环值然后呢?很高兴你得到了它;
email -> rahul@gmail.com
name -> RAHUL
fullname -> Rahul Kushwaha
cardno -> 1764987364892637
expm -> 02
cvv -> 343
expy -> 2022
address -> RZ-B
city -> New Delhi

email -> seema@gmail.com
name -> SEEMA
fullname -> Seema Kumari
cardno -> 123456789120393
expm -> 08
cvv -> 56
expy -> 2023
address -> HK/L
city -> New Delhi