这似乎应该很简单,所以我必须遗漏一些东西。我只想按名称设置模型实例中字段的值。说我有:
class Foo(Model):
bar = CharField()
f = Foo()
我想按名称设置bar的值,而不是通过访问该字段。如下所示:
f.fields['bar'] = 'BAR"
而不是
f.bar = 'BAR'
我已尝试过setattr但它不会在数据库中保留该值。我也尝试过_meta.fields,但在此过程中遇到了各种错误。
答案 0 :(得分:61)
如果您通过setattr
修改该值,则需要记住在修改后保存模型。我曾经被咬过去,我改变了价值但却忘了保存模型,并得到了相同的结果。
setattr(f, 'bar', 'BAR')
f.save()
答案 1 :(得分:16)
我们可能需要查看更多代码。
setattr(f, 'bar', 'BAR')
应该可以工作,因为这是Django在内部的工作方式。
确保您也在呼叫“保存”。