2011-11-26 93 views
0

我希望能够以编程方式决定在django注释函数中使用哪个聚合器。也就是说,给出如下声明...Django注释 - 以编程方式选择聚合器

partsPerMachine = Machine.objects.annotate(num_parts=Count('parts')) 

...我想能够在运行时确定使用哪个聚合器。我可以总结/计算/平均/等。'parts,我不知道提前。

我不太了解django的作者用来创建这种语法的python魔术。如果这只是一个命名参数的情况,我可以使用Python的**语法来传递参数字典。但这似乎是别的...

回答

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')) 
+0

就是这样。谢谢。 – prauchfuss