Подтвердить что ты не робот

Как установить поле модели django по имени?

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

class Foo(Model):
  bar = CharField()

f = Foo()

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

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

вместо

f.bar = 'BAR'

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Убедитесь, что вы также вызываете "save".