迭代查询集值

时间:2016-01-06 13:10:42

标签: 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 enumerate(queryset):
    for ii, r in enumerate(c):
         print c

我得到了

 TypeError: 'Claim' object is not iterable

3 个答案:

答案 0 :(得分:3)

问题是您的第5行for ii, r in enumerate(c):您无法枚举Model类型。

当你在第一个循环中领先时,你可以退出。 (我不明白为什么第二个循环在那里......)

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>
....

答案 1 :(得分:0)

感谢Javier Buzzi我能够意识到自己的错误。我需要values_list()而不是values()。

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]

答案 2 :(得分:0)

这里 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()

输出

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

要了解更多信息,请访问此处 https://btechcse762.blogspot.com/2020/11/different-ways-to-perform-operations-on.html