无法在Django中迭代查询集

问题描述

我有这个模特

class AgeRange(models.Model):
    frm = models.CharField(max_length=20,blank=False)
    to = models.CharField(max_length=20,blank=False)

现在,当我尝试使用从frm +压缩到字段的值填充下拉列表时。 因此,我运行以下查询集:

class ReportForm(forms.ModelForm):
    ranges = AgeRange.objects.all().values()
    print(ranges)
    for item in ranges:
        print(item.frm)

其打印范围如下:

<QuerySet [{'id': 2,'frm': '1','to': '18'} ..... so on.

然后,我得到这个错误

print(item.frm)
AttributeError: 'dict' object has no attribute 'frm'

我很困惑为什么在尝试迭代查询集时无法识别“ frm”:

for item in ranges:
    print(item.frm)

解决方法

如果要在查询集中使用所有属性,则应删除values。 因为values()返回的字段值字典作为参数传递

ranges = AgeRange.objects.all()
print(ranges)
for item in ranges:
    print ( item.frm)

尝试这种方式可以得到frm

,

这是因为您将查询集转换为词典列表。

可以:

class ReportForm(forms.ModelForm):
    ranges = AgeRange.objects.all().values()
    print(ranges)
    for item in ranges:
        print(item['frm'])

class ReportForm(forms.ModelForm):
    ranges = AgeRange.objects.all()
    print(ranges)
    for item in ranges:
        print(item.frm)