Python的Django的GETATTR():属性名称必须是字符串
问题描述:
我使用python,Django和得到以下错误:Python的Django的GETATTR():属性名称必须是字符串
getattr(): attribute name must be string
location: val = getattr(obj, field)
if field in headers:
if not isinstance(field, str):
val = getattr(obj, field)
else:
val = getattr(obj, field.LastName)
if callable(val):
val = val()
if type(val) == unicode:
val = val.encode("utf-8")
row.append(val)
我已经试过的代码,但都失败了很多变化。
答
您可以使用print(type(field))
确认对象类型field
。考虑到错误,它可能不是字符串。
看你的代码,它看起来像field
将是一个对象,具有属性是字符串,如LastName
。该生产线
val = getattr(obj, field)
可能会更好过阅读
val = getattr(obj, field.someattribute)
如果field.someattribute
不是字符串,则可以使用 str(field.someattribute)
将它转换为字符串,总计val = getattr(obj, str(field.someattribute))
错误消息告诉你属性名称必须是一个字符串,并且在测试“field”是* not *字符串之后专门调用'getattr(obj,field)'。你期望会发生什么? – BrenBarn
@BrenBarn字段是一个字符串,我也用val = getattr(obj,“LastName”),但那也不起作用。正如我刚开始学习python,我很天真。我也可以上传我的整个功能,如果这不会破坏stackoverflow的政策... – Abhishek