使用来自不同建模查询集的值呈现新 table
Render new table with values from a differently modeled queryset
我正在使用 django-tables2 来显示存储在 SQLite 数据库中的数据,如下所示:
(Table1:)
id field1 field2 field3
1 George green 42
2 George blue 72
3 George yellow 1
4 James brown 10
现在,我想重新组织此 table 并将 field2 中的值用作新列,并使用 field3 中的值填充单元格:
(Table 2:)
field1 green blue yellow brown
George 42 72 1
James 10
我有 django 模型和 tables 两个 tables 并且理论上我可以硬编码 table 2 的模型(尽管动态地这样做会更优雅,但要事第一)。
我现在的问题是:执行此转换的最佳方法是什么?
基本思路:
queryset = Model1.objects.all()
# reorganize queryset somehow
table = Table2(queryset)
我觉得这可以用更好的方式来完成。我很乐意提出任何建议!
谢谢,
菲利普
你可以试试这个:
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 以相应地显示新数据。
我正在使用 django-tables2 来显示存储在 SQLite 数据库中的数据,如下所示:
(Table1:)
id field1 field2 field3
1 George green 42
2 George blue 72
3 George yellow 1
4 James brown 10
现在,我想重新组织此 table 并将 field2 中的值用作新列,并使用 field3 中的值填充单元格:
(Table 2:)
field1 green blue yellow brown
George 42 72 1
James 10
我有 django 模型和 tables 两个 tables 并且理论上我可以硬编码 table 2 的模型(尽管动态地这样做会更优雅,但要事第一)。
我现在的问题是:执行此转换的最佳方法是什么?
基本思路:
queryset = Model1.objects.all()
# reorganize queryset somehow
table = Table2(queryset)
我觉得这可以用更好的方式来完成。我很乐意提出任何建议!
谢谢, 菲利普
你可以试试这个:
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 以相应地显示新数据。