2016-10-22 3 views
0

Я попытался использовать этот запрос, но не дал ожидаемого результата.как сортировать по счету в django queryset?

ships = Shipment.objects.filter(added_on__gte=("2016-10-22")).annotate(sku_count=Count('sku')).order_by('sku_count') 
+0

Если я не ошибаюсь, вы хотите группировать столбец «sku» и сортировать по его счету? –

ответ

0

Если вы хотите сгруппировать по столбцу 'sku' и отсортировать по его количеству, это может вам помочь.

# Ascending order 
ships = Shipment.objects.filter(added_on__gte=("2016-10-22")).values("sku").annotate(sku_count=Count('sku')).order_by('sku_count') 

# Descending order 
ships = Shipment.objects.filter(added_on__gte=("2016-10-22")).values("sku").annotate(sku_count=Count('sku')).order_by('-sku_count') 
+0

'В [3]: ships = Shipment.objects.filter (added_on__gte (" 2016-10-22 ")). Values ​​(" sku "). Annotate (sku_count = Count ('sku')). Order_by ('sku_count ') В работе [5]: корабли [0] Out [5]: {' ы ': u'bedcll_5rsdeal', 'sku_count': 1} ' Вместо ** кораблей [0] = { 'SKU ': u'bedcll_5rsdeal', 'sku_count': 1} ** мне нужен объект класса Shipment, чтобы я мог продолжить дальнейшие операции. –

+0

@TejasGaykar здесь мы делаем группу по полю 'sku', поэтому мы получаем просмотр комментариев, если вы хотите, чтобы массив классов' Shipment' имел значение типа 'bedcll_5rsdeal', тогда вам нужно перечислить список 'ship' следующим образом: - 'для корабля на судах: \t OBJ = Shipment.objects.filter (ы = судно [ 'ы']) \t # ваш код' ' –

0

Вы сказали в своем комментарии выше, что хотите объект. вы должны уметь это делать:

ships = Shipment.objects.filter(added_on__gte("2016-10-22")).annotate(sku_‌​count=Count('sku')).‌​order_by('sku_count'‌​) 

Единственное, что вы будете иметь повторяющиеся строки для одного и того же sku. помните, что когда вы используете «group by», вы суммируете несколько значений (экземпляры отправки) общим для них значением (sku).

так, как было сказано выше Викрам, вы можете получить уникальные артикулов и их количества, как это:

Shipment.objects.filter(added_on__gte("2016-10-22")).values(‌​"sku").annotate(sku_‌​count=Count('sku')).‌​order_by('sku_count'‌​) 

но для того, чтобы получить конкретные примеры пересылкой, вы должны будете получать экземпляры пересылку «SKU» в это пункт. НТН.

+0

корабли = Shipment.objects.filter (added_on__gte = (" 2016- 10-22 ")). Annotate (sku_count = Count ('sku')). Order_by ('sku_count')' Я пробовал это, он работал без ошибок, но он не сортирует по подсчетам sku Я повторил поставки в для петли следующим образом: 'для корабля на кораблях: print ship.sku' и пришел выход следующим образом 'BKS_100616_5MCD samsung_LED599 BKS_2809_RBKwtch BKS_100616_5MCD samsung_LED599 samsung_LED599 BKS_100616_5MCD BKS_2809_RBKwtch samsung_LED599 ' –

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