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

11 投票
1 回答
6515 浏览
提问于 2025-04-15 23:20

我想做的事情其实很简单:

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() 的对应函数。它需要三个参数:一个对象、一个字符串和一个任意值。这个字符串可以是一个已经存在的属性名,也可以是一个新的属性名。这个函数会把值赋给指定的属性,只要这个对象允许这样做。

撰写回答