2015-10-15 36 views
1

我使用的Django tables2顯示存儲在SQLite數據庫這樣的數據:從不同的建模渲染查詢集新表值

(Table1:) 
id field1 field2 field3 
1 George green 42 
2 George blue 72 
3 George yellow 1 
4 James brown 10 

現在,我想這個重組表和使用從場2作爲新列值和填充值細胞場3:

(Table 2:) 
field1 green blue yellow brown 
George 42  72 1 
James      10 

我有兩個表Django模型和表格,我理論上可以硬編碼模型表2(雖然會比較飄逸動態地做這件事,但首先要做的事情)。

我現在的問題是:執行這種轉換的最佳方式是什麼?

基本思想:

queryset = Model1.objects.all() 
# reorganize queryset somehow 
table = Table2(queryset) 

我有一種感覺,這可能會以更好的方式來完成。我會很高興有任何建議!

感謝, 菲利普

回答

0

你可以試試這個:

from django.db.models import Sum 

all_items = Model1.objects.all() 
names = Model1.objects.values_list('field1', flat=True) 
name_set = set(names) 

items = [] 

color_choices = ['green', 'blue', 'yellow'] 

for name in name_set: 
    name_info = { 
     'field1': name, 
    } 

    for color_choice in color_choices: 
     result_sum = all_items.filter(field1=name, field2=color_choice).aggregate(color_sum=Sum('field3')) 
     name_info[color_choice] = result_sum['color_sum'] 

    items.append(name_info) 

table = Table2(items) 

該代碼使用一組,然後爲每個名字得到唯一的名稱,它計算的灰色,藍色和黃色的屬性(其計算爲人員所有數量的總和,使用指定的唯一名稱選擇該顏色)。所有這些信息都收集在變量項目的字典列表中,然後傳遞給django-tables2用於渲染目的。

然後只需配置django-tables2以相應地顯示新數據。

+0

太棒了,非常感謝!只是對未來用戶的一個小評論:'Model1.objects.values(...)'應該是'Model1.objects.values_list(...)'。然後它就像一個魅力。 – Phil