2013-07-13 71 views
0

我使用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) 

我已经试过的代码,但都失败了很多变化。

+0

错误消息告诉你属性名称必须是一个字符串,并且在测试“field”是* not *字符串之后专门调用'getattr(obj,field)'。你期望会发生什么? – BrenBarn

+0

@BrenBarn字段是一个字符串,我也用val = getattr(obj,“LastName”),但那也不起作用。正如我刚开始学习python,我很天真。我也可以上传我的整个功能,如果这不会破坏stackoverflow的政策... – Abhishek

回答

0

您可以使用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))

相关问题