2013-07-13 1 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

Сообщение об ошибке сообщает вам, что имя атрибута должно быть строкой, и вы специально вызываете 'getattr (obj, field)' после тестирования, что 'field' является * not * строкой. Чего вы ожидали? – BrenBarn

+0

Поле @BrenBarn - это строка, я также использовал val = getattr (obj, «LastName»), но это также не работает. Поскольку я только начал изучать python, я наивна в нем. Я мог бы также загрузить всю свою функцию, если это не устраняет политику stackoverflow. – Abhishek

ответ

0

Вы можете подтвердить тип объекта field с помощью print(type(field)). Вероятно, это не будет строка с учетом ошибки.

Глядя на ваш код, он выглядит как field будет объект с атрибутами , которые являются строками, такие как LastName. Линия

val = getattr(obj, field)

, вероятно, будет лучше чтение

val = getattr(obj, field.someattribute)

Если field.someattribute не является строкой, вы можете привести его в строку, используя str(field.someattribute)

Для итога от val = getattr(obj, str(field.someattribute))

Смежные вопросы