使用动态字段名更新模型实例
我想做的事情其实很简单:
f=Foobar.objects.get(id=1)
foo='somefield'
bar='somevalue'
f.foo=bar
f.save()
但是这样做不行,因为它试图更新f这个对象的'foo'字段,而这个字段当然是不存在的。我该怎么做才能实现这个呢?
1 个回答
36
你可以使用 setattr
:
f = Foobar.objects.get(id=1)
foo = 'somefield'
bar = 'somevalue'
setattr(f, foo, bar) # f.foo=bar
f.save()
[
setattr
] 是getattr()
的对应函数。它需要三个参数:一个对象、一个字符串和一个任意值。这个字符串可以是一个已经存在的属性名,也可以是一个新的属性名。这个函数会把值赋给指定的属性,只要这个对象允许这样做。