42

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.

2 Answers 2

84

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.

setattr(f, 'bar', 'BAR')
f.save()
0
21

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.

Not the answer you're looking for? Browse other questions tagged or ask your own question.