我想检索PUT数据列表,遍历此列表并根据列表中的属性更新对象。我的代码如下:
property_id = data['id']
if property_id:
property_selected = Property.objects.get(id=property_id)
if property_selected:
for d in data:
property_selected.d = data[d]
property_selected.save()
但是,这不起作用,因为当属性名为name时,它会将值保存为property_selected.d而不是property_selected.name。有谁知道我应该如何解决这个问题?
答案 0 :(得分:1)
您可以执行以下操作(使用iteritems()
和setattr()
):
for key, value in data.iteritems():
setattr(property_selected, key, value)
但您应该限制允许编辑的字段:
for key, value in data.items():
if key in ['foo_field', 'bar_field']:
setattr(property_selected, key, value)
答案 1 :(得分:0)
要按名称设置属性,可以使用django模型实例的setattr方法
setattr(property_selected, d, data[d])
答案 2 :(得分:0)
使用内置函数setattr。
for d in data:
setattr(property_selected, d, data[d])
使用setattr的a number of answers有点照亮。