是否可以将字段名称作为变量发送到Django的.annotate中

时间:2016-04-06 22:24:52

标签: python django filter annotations

是否可以将字段名称作为变量发送?

以下工作(注意:myqso是基于具有名为LocTypeNum的字段的模型的过滤查询集):

myqsnew = myqso.annotate(newloctypenum=F('LocTypeNum')+10)
myqsop = [{'the_new_loctypenum':p.newloctypenum} for p in myqsnew]

但我想将LocTypeNum作为变量发送。是否有更好/更快的方法来制作计算字段并将变量用作字段名称?谢谢!

1 个答案:

答案 0 :(得分:3)

在这个例子中LocTypeNum只是一个字符串。所以你可以用变量替换:

somefield = "some_field"
SomeModel.objects.all().aggregate(somename=Sum(F(somefield))

你甚至可以将路径名称变为可变的:

SomeModel.objects.all().aggregate(**{somename: Sum(F(somefield)})