当我尝试在Django中执行此操作时:
organisms = Organism.objects.filter(code=c)
fields = ['name', 'linnean_type', 'age'] # in reality there are more
for o in organisms:
for f in fields:
print o[f]
我收到此错误:
TypeError 'Organism' object has no attribute '__getitem__'
有没有办法可以在不使用点表示法的情况下访问查询集中每个结果的属性?
答案 0 :(得分:2)
在内部使用[]
表示法时,Python将尝试在该对象上调用__getitem__
方法。由于Organism
对象没有定义该方法,因此失败并出现该错误。
相反,您可以使用getattr
功能,就像这样
print getattr(o, f)
如果对象中不存在该属性,您甚至可以指定要使用的默认值,例如
print getattr(o, f, "{} not present in {}".format(f, o))