Python 基于字典值更新Django中的模型

Python 基于字典值更新Django中的模型,python,sql,django,Python,Sql,Django,我有一个Django字典,包含一个模型的键和一些值。我想更新模型(A)的一个字段(分数),如下所示: 将所有记录的该字段乘以一个常数,然后,如果在字典中找到该记录,则将相应的dict值添加到该字段。有很多记录,获取并保存每个对象需要很多时间。我尝试了此更新查询,但它不起作用: A.objects.update(score=F('score')*CONST+(dictionary[F('key')),如果dictionary中的F('key'),则为0)) 问题是所有记录的条件似乎都为false,

我有一个Django字典,包含一个模型的键和一些值。我想更新模型(A)的一个字段(分数),如下所示: 将所有记录的该字段乘以一个常数,然后,如果在字典中找到该记录,则将相应的dict值添加到该字段。有很多记录,获取并保存每个对象需要很多时间。我尝试了此更新查询,但它不起作用:

A.objects.update(score=F('score')*CONST+(dictionary[F('key')),如果dictionary中的F('key'),则为0))

问题是所有记录的条件似乎都为false,我试图调试该问题,但似乎
F('key')
没有所需的值(字符串)

有关更多信息,此行具有正确的结果:

a=a.objects.get(key='key1')

a、 score*CONST+(dictionary[a.key]如果dictionary中的a.key为0)

在这里使用dictionary查找没有意义;这被转换为一个SQL查询,F()的值在Python中没有解析,因此无法使用它在字典中查找


相反,您可能必须使用字典查找。

在这里使用字典查找没有意义;这被转换为一个SQL查询,F()的值在Python中没有解析,因此无法使用它在字典中查找


相反,您可能必须使用。

因此借用@Daniel Roseman的答案,您可以使用条件表达式,我们可以使用通用的方法来实现。我只是自己做的

首先,我们将在
案例中使用
表达式时生成
表达式列表

when_criteria = [When(key=key, then=value) for key, value in dictionary.items()]
我们将使用Python的*运算符将一个列表扩展为一个参数列表,这些参数可以传递到函数中,在本例中为
case

A.objects.update(score=F('score') * CONST + Case(*when_criteria,
 default=0)

诚然,我没有在更新方法上尝试过这个,但它确实可以与注释一起使用。

因此借用@Daniel Roseman的答案,你可以使用条件表达式,我们可以使用一种通用的方法。我只是自己做的

首先,我们将在
案例中使用
表达式时生成
表达式列表

when_criteria = [When(key=key, then=value) for key, value in dictionary.items()]
我们将使用Python的*运算符将一个列表扩展为一个参数列表,这些参数可以传递到函数中,在本例中为
case

A.objects.update(score=F('score') * CONST + Case(*when_criteria,
 default=0)

诚然,我没有在更新方法上尝试此操作,但它确实适用于注释。

我无法取消重新启动,如何使用条件表达式通过查询中的字段值查找字典值@丹尼尔·罗斯曼你不能,所以你不能用字典。相反,您应该详细说明各种条件。在这种情况下,这是不可能的,非常感谢您的帮助。我无法重新启动,如何使用条件表达式通过查询中的字段值查找字典值@丹尼尔·罗斯曼你不能,所以你不能用字典。相反,你应该详细说明各种情况。在这种情况下,这是不可能的,非常感谢你的帮助。