Google App Engine: как программно получить доступ к свойствам моего класса Model? - PullRequest
8 голосов
/ 18 сентября 2008

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

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 ]

7 голосов
/ 18 сентября 2008

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

Попытка:

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

Также имеется hasattr.

3 голосов
/ 19 сентября 2008

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

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

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

1 голос
/ 18 сентября 2008

Попробуйте:

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

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

1 голос
/ 18 сентября 2008
getattr(p, s)
setattr(p, s, new_value)
0 голосов
/ 04 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...