2017-01-16 1 views
0

У меня есть следующая модель.Группа Django ORM

Class A(models.Model): 
    tmp_field = models.IntegerField() 
    ... 
    ... 

Теперь я хочу, чтобы принести только id с и сгруппировать их вместе на основе tmp поля.

Мой запрос выглядит

A.objects.all().values('id') 

Так что я хочу что-то вроде этого.

[ 
    {tmp1: [id1, id2, id3]}, 
    {tmp2: [id5, id6, id7]}, 
    {tmp3: [id12, id213, id1299]} 
    ... 
] 

Как я группировать их tmp_field.

ответ

1

Измените значения QuerySet для извлечения tmp поля, а

queryset = A.objects.all().values('id', 'tmp') 

затем построить словарь вам нужно с помощью defaultdict

from collections import defaultdict 
d = defaultdict(list) 
for q in queryset: 
    d[q['tmp']].append(q['id']) 

Результата d будет словарём tmp как ключи , Это немного отличается от вашего вопроса (у вас есть список словарей, каждый с одним ключом). Вы можете настроить код, если вам нужна другая структура данных.

+0

Это один способ. Но я думал об избежании обработки python. Невозможно сделать это с помощью Django-запроса. – Pattu

+0

Нет, нет простого способа получить нужную группировку с помощью Django ORM. – Alasdair

Смежные вопросы