AppEngine Python - обновление свойств сущности без двадцати операторов elif - PullRequest
0 голосов
/ 08 сентября 2010

Предположим, у меня есть модель AppEngine, определенная с двадцатью различными свойствами StringProperty. И тогда у меня есть веб-форма, которая отправляет обновленные значения для объекта этой модели. Я получаю что-то вроде этого после прочтения данных формы:

entity_key['name'] = 'new_name'
entity_key['city'] = 'new_city'
entity_key['state'] = 'new_state'
etc...

Чтобы на самом деле присвоить эти значения сущности, я сейчас делаю что-то вроде этого:

if property == 'name':
  entity.name = entity_key['name']
elif property == 'city':
  entity.city = entity_key['city']
elif property == 'state':
  entity.state = entity_key['state']
etc...

Есть ли способ присвоить значения свойств без двадцати операторов elif? Я вижу, что есть функция model.properties (), но я не вижу, как все это связать.

Вся помощь приветствуется.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Тот же эффект, что и для вашего дерева if / elif, можно получить одним оператором:

setattr(entity, property, entity_key[property])

Это просто элементарный Python, работающий одинаково в каждой версии Python, начиная с 1.5.2 (и, возможно, раньше - я не использовал Python много лет назад!) И не имеет ничего общего ни с App Engine, ни с Django, ни с их комбинацией.

0 голосов
/ 09 сентября 2010

Cool. Просто для справки других, следующие два фрагмента идентичны:

entity.some_property = "cat";

setattr(entity, "some_property", "cat")

Я знал о функции setattr, Алекс, так что спасибо за помощь.

...