2015-05-02 2 views
0

Смотрите моя модельПометки в одной модели Django

https://github.com/rg3915/morris/blob/master/myproject/core/models.py

Как вернуть процент «UF» в общей сложности?

Пример:

'UF', 'Квант'

'AM', 8

'СП', 9

'RJ', 4

Я стараюсь

p=Person.objects.values('uf').annotate(quant=Count('uf', distinct=True)).values_list('uf','quant') 
print(p.query) 

но вернуться

SELECT "core_person"."uf", COUNT(DISTINCT "core_person"."uf") AS "quant" FROM "core_person" GROUP BY "core_person"."uf", "core_person"."first_name" ORDER BY "core_person"."first_name" ASC 

и мне нужно

SELECT "core_person"."uf", COUNT(DISTINCT "core_person"."uf") AS "quant" FROM "core_person" GROUP BY "core_person"."uf" ORDER BY "core_person"."uf" ASC 

ответ

2

Из вашего примера, я буду считать, что вы ищете, чтобы получить список государств, а общее число людей, принадлежащих к этому состоянию.

Вы были очень близки в своей попытке, однако вам не хватало order_by(), которые позволили бы вам выбрать поле заказа.

Таким образом ваш запрос должен выглядеть следующим образом:

Person.objects.values('uf').annotate(quant=Count('uf')).order_by('uf').values_list('uf','quant') 

Я надеюсь, что вы заметите, что я также удалил distinct=True аргумент из функции Count, как мы хотим, чтобы иметь возможность сгруппировать все аналогичные результаты.

+0

Я подошел очень близко к нему. Спасибо. –

+0

Привет, но возврат [('AC', 10), ('AL', 9), ('AM', 8), ('AP', 8), ('BA', 11), .. Как вернуть [(uf: 'AC', quant: 10), (uf: 'AL', quant: 9), (uf: 'AM', quant: 8), (uf: 'AP ', квант: 8), (uf:' BA ', quant: 11), ... –

+1

Решено: Person.objects.values ​​(' uf '). annotate (quant = Count (' uf ')). order_by ('uf'). значения ('uf', 'quant') –

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