【问题标题】:how to sort by count in django queryset?如何在 Django 查询集中按计数排序?
【发布时间】:2016-10-22 13:17:27
【问题描述】:

我尝试使用此查询,但没有给出预期的结果。

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

【问题讨论】:

  • 如果我没记错的话,你想用“sku”列分组并按其计数排序是吗?

标签: django-models django-queryset


【解决方案1】:

如果您想使用“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')

【讨论】:

  • In [3]: ships = Shipment.objects.filter(added_on__gte("2016-10-22")).values("sku").annotate(sku_count=Count('sku')).order_by('sku_count') In [5]: ships[0] Out[5]: {'sku': u'bedcll_5rsdeal', 'sku_count': 1} 而不是 ships[0] = {'sku': u'bedcll_5rsdeal', 'sku_count': 1} 我需要 Shipment 类的对象,以便我可以继续进行进一步的操作。
  • @TejasGaykar 我们在这里进行分组,按sku 字段,这就是我们获取摘要视图的原因,如果您想要具有类似“bedcll_5rsdeal”的值的Shipment 类数组,那么您必须迭代ships 列表如下:- for ship in ships: obj=Shipment.objects.filter(sku=ship['sku']) #your code
【解决方案2】:

你在上面的评论中说你想要这个对象。你应该能够做到这一点:

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

唯一的问题是同一个 sku 会有重复的行。请记住,当您使用“分组依据”时,您是通过一个共同的值(sku)聚合多个值(Shipment 实例)。

就像 Vikram 上面所说的那样,您可以像这样获得独特的 sku 和它们的数量:

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

但为了获取特定的 Shipment 实例,您必须在此时按“sku”获取 Shipment 实例。 HTH。

【讨论】:

  • ships=Shipment.objects.filter(added_on__gte=("2016-10-22")).annotate(sku_count =Count('sku')).order_by('sku_count') 我试过这个,它运行没有错误,但它没有按 sku 计数排序 我在 for 循环中迭代发货如下for ship in ships: 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
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2012-07-30
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
相关资源
最近更新 更多