views:

21

answers:

2

Suppose I have an AppEngine model defined with twenty different StringProperty properties. And then I have a web form, which POSTs updated values for an entity of this model. I end up with something like this after reading in the form data:

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

To actually assign these values to the entity, I'm presently doing something like this:

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...

Is there any way to assign the property values without twenty elif statements? I see that there is the model.properties() function, but I don't see anyway to tie all this together.

All help is appreciated.

Thank you.

+1  A: 

The same effect as for your if / elif tree could be obtained by a single statement:

setattr(entity, property, entity_key[property])

This is just elementary Python, working the same way in every Python version since 1.5.2 (and perhaps earlier -- I wasn't using Python that many years ago!-), and has nothing specifically to do with App Engine, nor with Django, nor with the combination of the two.

Alex Martelli
A: 

Cool. Just for others' reference, the following two snippets are identical:

entity.some_property = "cat";

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

I did know about the setattr function, Alex, so thanks for helping me out.

John Phillips