使用动态字段名称更新模型实例

her*_*erp 6 python django

我想要做的很简单:

f=Foobar.objects.get(id=1)
foo='somefield'
bar='somevalue'
f.foo=bar
f.save()
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它试图更新f对象的'foo'字段,当然这不存在.我怎么能做到这一点?

mik*_*iku 17

你可以使用setattr:

f = Foobar.objects.get(id=1)
foo = 'somefield'
bar = 'somevalue'
setattr(f, foo, bar) # f.foo=bar
f.save()
Run Code Online (Sandbox Code Playgroud)

[ setattr]是对应的getattr().参数是一个对象,一个字符串和一个任意值.该字符串可以命名现有属性或新属性.如果对象允许,该函数会将值分配给属性.