2016-03-03 77 views
3
truncate_date = connection.ops.date_trunc_sql('month', 'created') 
qs = Order.objects.extra({'month':truncate_date}) 
report = qs.values('month', 'location').annotate(Count('pk')) 

在這個例子中,我想通過變量傳遞值,在前面的幾行中我有一些if並且取決於它我需要按照我的結果進行分組。 而不是'月','位置'應該有變量像my_list。我試圖用join和map來轉換它,但每次出現錯誤。Django group by with變量

+0

只使用變量:'報告= qs.values(my_list).annotate(計數( 'PK'))' – Anentropic

回答

3

也許,你正在尋找unpacking。如果函數需要單獨的參數,並且在列表或元組中有這些參數,則應使用*將值解壓爲單獨的值。對於字典,有一個類似的語法**

在你的情況下,嘗試:

my_list = ['month', 'location'] 
truncate_date = connection.ops.date_trunc_sql('month', 'created') 
qs = Order.objects.extra({'month':truncate_date}) 
report = qs.values(*my_list).annotate(Count('pk')) 
3

如果你有想要值的列表,你可以使用*語法:

truncate_date = connection.ops.date_trunc_sql('month', 'created') 
qs = Order.objects.extra({'month':truncate_date}) 
value_list = ['month', 'location'] 
report = qs.values(*value_list).annotate(Count('pk'))