views:

245

answers:

2

This seems like it should be dead simple, so I must be missing something. I just want to set the value of a field in my model instance by name. Say I have:

class Foo(Model):
  bar = CharField()

f = Foo()

I want to set the value of bar by name, not by accessing the field. So something like:

f.fields['bar'] = 'BAR"

instead of

f.bar = 'BAR'

I've tried setattr but it doesn't persist the value in the database. I also tried going through _meta.fields but got various errors along the way.

+3  A: 

If you modify the value via setattr, you need to remember to save the model after modifying it. I've been bitten in the past where I changed the values but forgot to save the model, and got the same result.

Paul McMillan
DOH! Yeah, I forgot to save. I will go hide in shame now...
Matt S.
+3  A: 

We may have to see more code.

setattr(f, 'bar', 'BAR')

should work as this is how Django does it internally.

Make sure you are calling 'save', as well.

Joe Holloway