我是一个蟒蛇新手,所以如果以前问过这个问题,我会事先道歉。
我正在GAE中构建一个应用程序,需要生成一个包含用户定义字段子集值的报告。
例如,在我的db模型CrashReport中,我有以下字段:
我向用户显示上面的列表作为他们选择的复选框组。无论用户选择哪个字段,我都会创建一个报告,显示数据存储区中的所有值,但仅针对它们选择的字段。例如,如果从上面的列表中,用户选择了build_id和crash_text字段,则输出可能如下所示:
build_id crash_text
0.8.2吹制垫片
0.8.2瘪胎
0.8.1裂缝
...
所以问题是,我究竟只能访问用户定义的字段的值?
答案 0 :(得分:2)
给定模型实例mi
和属性名称an
,getattr(mi, an)
将获取对象an
的属性mi
的值。如果对象AttributeError
没有该名称的属性,它将引发mi
;如果你想避免这种情况,请尝试例如getattr(mi, an, None)
。
因此,如果您有一个属性名称列表la
,
[getattr(mi, x, None) for x in la]
为您提供了给定实例la
的名称在mi
中的各种属性的值列表。
如果您还有一个实例列表li
,并且想要一个列表列表(每个实例一个外部列表,每个列表包含所有属性值),
[[getattr(mi, x, None) for x in la] for mi in li]
等等。这些都是一般的Python概念和操作,它们适用于从数据存储区中提取的模型实例,与任何其他Python对象相比,不会少(也没有)。