групповое действие на наборе запросов Django - PullRequest
1 голос
/ 29 сентября 2019

У меня есть таблица БД, подобная этой:

id|type_id | col1 | col2 | col3
0 |     1  |   2  |  b   |   c
1 |     2  |   1  |  a   |   a
2 |     2  |   2  |  a   |   c
3 |     1  |   3  |  b   |   c

Мне нужно написать набор запросов, чтобы иметь:

[{'id':1, 'count_col1': 5, 'type_id__name':balh, 'col2':b},{'id':2, 'count_col1':3, 'type_id__name': balab, 'col2':a}]

как я могу это сделать?это может быть сделано групповым в пандах, но я не знаю, как это сделать здесь.

1 Ответ

1 голос
/ 29 сентября 2019

Похоже, вы стремитесь вычислить сумму col1 с для каждого id.Мы можем сделать это с помощью:

from django.db.models import F, Sum

Model.objects.values('type_id').annotate(
    <b>type_name=F('type__name')</b>,
    <b>count_col1=Sum('col1')</b>
).order_by('type_id')

Это создаст QuerySet словарей, которые будут выглядеть следующим образом:

<QuerySet [
    {'type_id': 1, 'type_name': 'foo', 'count_col1': 5},
    {'type_id': 2, 'type_name': 'bar', 'count_col1': 3}
]>

или если вы хотите включить col2:

from django.db.models import F, Sum

Model.objects.values('type_id'<b>, 'col2'</b>).annotate(
    type_name=F('type__name'),
    count_col1=Sum('col1')
).order_by('type_id'<b>, 'col2'</b>)
...