使用来自不同建模的查询集的值呈现新表

时间:2015-10-15 13:47:36

标签: python django sqlite view django-tables2

我正在使用django-tables2来显示存储在SQLite数据库中的数据,如下所示:

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

现在,我想重新组织此表,并使用field2中的值作为新列,并使用field3中的值填充单元格:

(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)

我觉得这可以用更好的方式完成。我会对任何建议感到高兴!

谢谢, 菲利普

1 个答案:

答案 0 :(得分: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以相应地显示新数据。