2011-11-26 69 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