Подтвердить что ты не робот

Доступ к полям модели Django с использованием строки вместо синтаксиса точек?

В Django я могу это сделать:

test = Test.objects.get(id=1)
test.name

Я хочу иметь доступ к свойствам с помощью динамически генерируемых строк, например:

test['name']

или любой другой синтаксис с использованием строки. Я попробовал

test._meta.get_field_by_name('name')

но это возвращает само поле, а не значение.

Любые идеи?

4b9b3361

Ответ 1

Вы можете использовать python, встроенный в getattr():

getattr(test, 'name')

Ответ 2

Предполагая, что имя является атрибутом вашего теста экземпляра getattr(test, 'name'), следует вернуть соответствующее значение. Или test.__dict__['name'].

Подробнее о getattr() можно узнать здесь: http://effbot.org/zone/python-getattr.htm

Ответ 3

Другие ответы по-прежнему сохраняются, но теперь вы можете сделать это с помощью Django _meta.get_field().

test._meta.get_field('name')

Обратите внимание, что API-интерфейс модели _meta начал свою официальную поддержку и документация с 1,8, но был распространен и использован в предыдущих версиях до официальная документация.

Ответ 4

В 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