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 django-us...@googlegroups.com.
To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.