【问题标题】:Update QuerySet by attribute variable通过属性变量更新 QuerySet
【发布时间】:2021-07-22 20:33:49
【问题描述】:

以下面的数据为例,其中prop 是我要更新的查询集,results 是信息字典。此 dict 具有作为此查询集中属性的键,并且还具有不是此 QuerySet 中的属性的键。如果它的属性匹配,我只想更新这个 QuerySet...

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

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    您可以使用setattr(…) builtin function [python-doc],从而使用:

    for apicall in results:
        if hasattr(prop,apicall):
            setattr(prop, apicall, results[apicall])
    prop.save()

    最好在所有更改之后保存prop,否则我们将执行大量额外的数据库查询。

    【讨论】:

    • 我想我应该继续使用 RTFM。 setattr 还需要 3 个参数,其中应输入新值。非常感谢!
    • @BlakeRussell: aaarrggggghhh...谢谢,这确实是一个错误:(
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多