Обновить экземпляр модели динамическими именами полей - PullRequest
6 голосов
/ 30 мая 2010

То, что я хочу сделать, довольно просто:

f=Foobar.objects.get(id=1)
foo='somefield'
bar='somevalue'
f.foo=bar
f.save()

Это не работает, так как он пытается обновить поле 'foo' объекта f, которое, конечно, не существует. Как мне это сделать?

1 Ответ

17 голосов
/ 30 мая 2010

Вы можете использовать setattr:

f = Foobar.objects.get(id=1)
foo = 'somefield'
bar = 'somevalue'
setattr(f, foo, bar) # f.foo=bar
f.save()

[setattr] является аналогом getattr(). Аргументами являются объект, строка и произвольное значение. Строка может называть существующий атрибут или новый атрибут. Функция присваивает значение атрибуту, если объект позволяет это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...