Skip to content

Instantly share code, notes, and snippets.

@barseghyanartur
Forked from ludoo/aggregate_concat.py
Created May 17, 2017 15:03
Show Gist options
  • Save barseghyanartur/93fc166fc3c1efa988d13f9f3a36f849 to your computer and use it in GitHub Desktop.
Save barseghyanartur/93fc166fc3c1efa988d13f9f3a36f849 to your computer and use it in GitHub Desktop.
Django aggregates GROUP_CONCAT support for MySQL
"""
From http://harkablog.com/inside-the-django-orm-aggregates.html
with a couple of fixes.
Usage: MyModel.objects.all().annotate(new_attribute=Concat('related__attribute', separator=':')
"""
from django.db.models import Aggregate
from django.db.models.sql.aggregates import Aggregate as SQLAggregate
class Concat(Aggregate):
def add_to_query(self, query, alias, col, source, is_summary):
aggregate = SQLConcat(col, source=source, is_summary=is_summary, **self.extra)
query.aggregates[alias] = aggregate
class SQLConcat(SQLAggregate):
sql_function = 'group_concat'
@property
def sql_template(self):
separator = self.extra.get('separator')
if separator:
return '%(function)s(%(field)s, "%(separator)s")'
else:
return '%(function)s(%(field)s)'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment