使用来自不同建模查询集的值呈现新 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 以相应地显示新数据。