我正在使用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)
我觉得这可以用更好的方式完成。我会对任何建议感到高兴!
谢谢, 菲利普
答案 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以相应地显示新数据。