Ответ 1
Вы можете использовать python, встроенный в getattr()
:
getattr(test, 'name')
В Django я могу это сделать:
test = Test.objects.get(id=1)
test.name
Я хочу иметь доступ к свойствам с помощью динамически генерируемых строк, например:
test['name']
или любой другой синтаксис с использованием строки. Я попробовал
test._meta.get_field_by_name('name')
но это возвращает само поле, а не значение.
Любые идеи?
Вы можете использовать python, встроенный в getattr()
:
getattr(test, 'name')
Предполагая, что имя является атрибутом вашего теста экземпляра getattr(test, 'name')
, следует вернуть соответствующее значение. Или test.__dict__['name']
.
Подробнее о getattr()
можно узнать здесь: http://effbot.org/zone/python-getattr.htm
Другие ответы по-прежнему сохраняются, но теперь вы можете сделать это с помощью Django _meta.get_field().
test._meta.get_field('name')
Обратите внимание, что API-интерфейс модели _meta начал свою официальную поддержку и документация с 1,8, но был распространен и использован в предыдущих версиях до официальная документация.
В Python вы обычно можете получать доступ к значениям в объекте с методом dict.
Скажем, у вас есть этот класс:
class Dog(object):
def __init___(self, color):
self.color = color
И затем я его создаю:
dog = Dog('brown')
Итак, я вижу цвет, делая:
print dog.color
Я также вижу цвет, делая:
print dog.__dict__['color']
Я могу установить цвет:
print dog.__dict__['color'] = 'green'
print dog.color
>>>green