Python 使用不同建模的queryset中的值呈现新表

Python 使用不同建模的queryset中的值呈现新表,python,django,sqlite,view,django-tables2,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

我使用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)
我觉得这可以用一种更好的方式来完成。我很乐意接受任何建议

谢谢, Philip你可以试试这个:

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以相应地显示新数据。

您可以尝试以下方法:

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即可相应地显示新数据。

太好了,非常感谢!给未来的用户一个小评论:
Model1.objects.values(…)
应该是
Model1.objects.values\u list(…)
。然后它就像一个符咒。太棒了,非常感谢你!给未来的用户一个小评论:
Model1.objects.values(…)
应该是
Model1.objects.values\u list(…)
。然后它就像一个符咒。