Google App Engine: как программно получить доступ к свойствам моего класса Model?

У меня есть модельный класс:

class Person(db.Model):
  first_name = db.StringProperty(required=True)
  last_name = db.StringProperty(required=True)

У меня есть экземпляр этого класса в pи строка s содержит значение 'first_name', Я хотел бы сделать что-то вроде:

print p[s]

а также

p[s] = new_value

Оба из которых приводят к TypeError,

Кто-нибудь знает, как я могу добиться того, чего хотел бы?

5 ответов

Если класс модели достаточно интеллектуален, он должен распознавать стандартные способы Python сделать это.

Пытаться:

getattr(p, s)
setattr(p, s, new_value)

Также есть hasattr.

Большое спасибо Джиму, точное решение, которое я искал:

p.properties()[s].get_value_for_datastore(p)

Всем остальным респондентам спасибо за вашу помощь. Я также ожидал, что класс Model реализует стандартный способ Python, но по какой-то причине этого не происходит.

getattr(p, s)
setattr(p, s, new_value)

Пытаться:

p.model_properties()[s].get_value_for_datastore(p)

Смотрите документацию.

p.first_name = "Новое имя" p.put()

или p = Person(first_name = "Firsty", last_name = "Lasty") p.put()

Другие вопросы по тегам