我有这个型号:
class Place(models.Model):
name = models.CharField()
price= models.IntegerField()
我想获得一系列机构的第一封信:
places = Place.objects.all()
places = places.extra(select={'group_field':'LCASE(SUBSTRING(places_place.name, 1, 1))'})
places = places.values('group_field')
places = places.annotate(count=Count('group_field'))
或者获取价格清单:
places = Place.objects.all()
places = place.extra(select={'group_field':'IF(price<200, \'<200\', \'>=200\')'})
places = places.values('group_field')
places = places.annotate(count=Count('group_field'))
我收到错误«无法解析关键字'group_field'到字段中。选择是:名称»。
如何按额外字段对地点进行分组,并按每个字母计算计数?
答案 0 :(得分:2)
places = places.values('first_letter').annotate(count=Count('id')).order_by()
&#39; ORDER_BY()&#39;是您的点票所必需的,请参阅此处https://docs.djangoproject.com/en/1.7/topics/db/aggregation/#order-by
答案 1 :(得分:0)
您应该使用不同位置的数量进行注释(具有相同的第一个字母):
p = Place.objects.all()
p = p.extra(select={'first_letter': 'SUBSTR(name,1,1)'})
p = p.values('first_letter').annotate(count=Count('id'))
您必须选择要注释哪个字段对每个地方都是唯一的字段。所以ID是最合适的。
Interesting与注释一起使用的values
方法的行为:
如果
values()
子句位于annotate()
之前,则将使用values()
子句描述的分组计算注释。