我有点被困在这里。所以假设我有一个字段列表(在DB表的上下文中):
list = ['title', 'description', 'name']
这些字段存在于数据库表Foo中。
所以这是我的问题......
foo = Foo()
for i in list:
foo.i = "value"
foo.save()
问题是解释器正在寻找一个名为'i'
的数据集,并且不会事先映射其值(例如,标题或描述)。反正有吗?
谢谢!
答案 0 :(得分:5)
使用setattr()
内置功能:
fields = ['title', 'description', 'name']
foo = Foo()
for field in fields:
setattr(foo, field, "value")
foo.save()
此外,list
不是一个好的变量名 - 它是内置的阴影,可能会引起问题/惊喜。
另外,你可能想要一个"字段名称的字典:字段值"相反。在这种情况下,您可以unpack it并传递给模型对象构造函数:
fields = {'title': 'My Title',
'description': 'My Description',
'name': 'My Name'}
foo = Foo(**fields)
foo.save()
答案 1 :(得分:1)
您正在尝试设置i
,而不是设置该对象的名称变量。
请尝试setattr
setattr(foo,i,value)