Python 基于字典值更新Django中的模型
我有一个Django字典,包含一个模型的键和一些值。我想更新模型(A)的一个字段(分数),如下所示: 将所有记录的该字段乘以一个常数,然后,如果在字典中找到该记录,则将相应的dict值添加到该字段。有很多记录,获取并保存每个对象需要很多时间。我尝试了此更新查询,但它不起作用: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,
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)
诚然,我没有在更新方法上尝试此操作,但它确实适用于注释。我无法取消重新启动,如何使用条件表达式通过查询中的字段值查找字典值@丹尼尔·罗斯曼你不能,所以你不能用字典。相反,您应该详细说明各种条件。在这种情况下,这是不可能的,非常感谢您的帮助。我无法重新启动,如何使用条件表达式通过查询中的字段值查找字典值@丹尼尔·罗斯曼你不能,所以你不能用字典。相反,你应该详细说明各种情况。在这种情况下,这是不可能的,非常感谢你的帮助。