2009-10-09 2 views
23

Кажется, что он должен быть мертвым простым, поэтому я должен что-то упустить. Я просто хочу установить значение поля в экземпляре модели по имени. Скажем, у меня есть:Как установить поле модели django по имени?

class Foo(Model): 
    bar = CharField() 

f = Foo() 

Я хочу установить значение бара по имени, а не путем доступа к полю. Так что-то вроде:

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

вместо

f.bar = 'BAR' 

Я попытался SetAttr, но не сохраняется значение в базе данных. Я также пробовал пройти через мета-поля, но на пути к ним были разные ошибки.

ответ

48

Если вы изменяете значение через setattr, вам необходимо запомнить модель после ее модификации. Я был укушен в прошлом, когда я изменил ценности, но забыл сохранить модель и получил тот же результат.

setattr(f, 'bar', 'BAR') 
f.save() 
+10

DOH! Да, я забыл сэкономить. Теперь я скроюсь от стыда ... –

13

Возможно, нам придется увидеть больше кода.

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

должно работать так, как это делает Django внутри.

Убедитесь, что вы также вызываете «сохранить».

Смежные вопросы