I'd stick to setattr and maybe verify that the key in the dictionary is one of the model's fields. I think there is a method on _meta called get_all_field_names. I've used this before to validate such actions.If that's the case, you can tweak the above to something like for name in obj._meta.get_all_field_names(): if name in dict_of_field_values: setattr(obj, name, dict_of_field_values[name])I'd probably be a bit more cautious, since get_all_field_names gets foreign keys and all sorts and the field might not be in the dictionary. I'd suggest: # Make a frozenset of the fields for fast access: allowed_fields = frozenset(obj._meta.get_all_field_names()) for field, value in dictionary_of_field_values.iteritems(): if field in allowed_fields: setattr(obj, field, value)
You're using different logic than I am, so yes, using a set (or frozen-set) would be better for your loop over the entries in the dict (my original code iterates over the defined field names and tries to look them up in the dict -- dict & set lookups are both O(1) so it only makes a difference if you're doing your lookups in the meta)
-tkc -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

