python - Django:使用索引表示法而不是点表示法访问查询集的属性?

标签 python django python-2.7

当我尝试在 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__'

有没有一种方法可以在不使用点符号的情况下访问查询集中每个结果的属性?

最佳答案

当您使用[]表示法时,Python将在内部尝试调用该对象上的__getitem__方法。由于 Organism 对象没有定义该方法,因此它会失败并出现该错误。

相反,您可以使用 getattr函数,像这样

print getattr(o, f)

如果对象中不存在该属性,您甚至可以指定要使用的默认值,如下所示

print getattr(o, f, "{} not present in {}".format(f, o))

关于python - Django:使用索引表示法而不是点表示法访问查询集的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29077512/

相关文章:

python - 进行类别不平衡正则化的正确位置(数据级别或批处理级别)

python - 属性错误 : 'NoneType' object has no attribute 'indim'

django - 如何从 Django 中的查询集中获取列表

django - 如何访问 Tastypie 自定义身份验证中的 POST 数据

python - 使用函数通过输入文件名来打开文本文件

python - 超过行长时缩进

Django:如何在密码重置/更改后销毁用户 session ?

python - 生成带日期的随机时间序列数据

python - help() 在哪里找到 Python 中的信息?

python - BioPython 中系统发育树的子树