我希望能够以编程方式决定在django annotate函数中使用哪个聚合器。也就是说,给出如下声明......
partsPerMachine = Machine.objects.annotate(num_parts=Count('parts'))
...我希望能够在运行时确定要使用哪个聚合器。我可以对parts
进行求和/计数/平均/等等,我不会提前知道哪一个。
我不太了解django的作者用来创建这种语法的python魔法。如果这只是命名参数的情况,我可以使用Python的**语法来传递参数字典。但这似乎是另一回事......
答案 0 :(得分:4)
聚合器只是Python类。在运行时选择所需聚合器的一种简单方法是将它们放入字典中,然后按键选择所需的聚合器:
from django.db.models import Count, Sum, Avg
aggregators = {
'count': Count,
'sum': Sum,
'avg': Avg
}
my_aggregator = aggregators[my_key]
partsPerMachine = Machine.objects.annotate(num_parts=my_aggregator('parts'))