以下面的数据为例,其中prop
是我尝试更新的查询集,results
是信息的字典。此字典具有在此查询集中属于属性的键,并且还具有不是此查询集中属性的键。我只想更新这个查询集,如果它的属性匹配...
prop = Property.objects.get(pk=14)
results = {'price': '525000', 'code': '55285', 'estimate': '1500'}
我知道这不起作用,因为它需要一个名为"apicall"的属性,但这就是我希望实现的逻辑:
for apicall in results:
if hasattr(prop,apicall):
prop.apicall = results[apicall]
prop.save()
如何避免从字面上调用prop.apicall
,而是prop.price
查询集中是否存在它?
您可以使用setattr(…)
内置函数 [python-doc],从而使用:
for apicall in results:
if hasattr(prop,apicall):
setattr(prop, apicall, results[apicall])
prop.save()
最好在所有更改后保存prop
,否则我们将执行大量额外的数据库查询。