2013-07-13 105 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))

相關問題