说我有下表称为fruits:
fruits
id | type | name ----------------- 0 | apple | fuji 1 | apple | mac 2 | orange | navel
我的目标是最终得出一个不同的types列表,并以逗号分隔names:
types
names
apple, 2, "fuji,mac" orange, 1, "navel"
这可以GROUP_CONCAT在MySQL中轻松完成,但是与Django等效项却遇到了麻烦。到目前为止,这是我所缺少的,但是我缺少这些GROUP_CONCAT东西:
GROUP_CONCAT
query_set = Fruits.objects.values('type').annotate(count=Count('type')).order_by('-count')
如果可能,我想避免使用原始SQL查询。
任何帮助将不胜感激!
Django ORM不支持此功能。如果你不想使用原始SQL,则需要分组并加入。
你可以创建自己的聚合函数(doc)
from django.db.models import Aggregate class Concat(Aggregate): function = 'GROUP_CONCAT' template = '%(function)s(%(distinct)s%(expressions)s)' def __init__(self, expression, distinct=False, **extra): super(Concat, self).__init__( expression, distinct='DISTINCT ' if distinct else '', output_field=CharField(), **extra)
并简单地用作:
query_set = Fruits.objects.values('type').annotate(count=Count('type'), name = Concat('name')).order_by('-count')
我正在使用django 1.8和mysql 4.0.3