mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			28 lines
		
	
	
		
			809 B
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			809 B
		
	
	
	
		
			Python
		
	
	
| from django.db.models import Aggregate
 | |
| 
 | |
| 
 | |
| class GroupConcat(Aggregate):
 | |
|     function = 'GROUP_CONCAT'
 | |
|     template = '%(function)s(%(expressions)s %(order_by)s %(separator)s)'
 | |
|     allow_distinct = False
 | |
| 
 | |
|     def __init__(self, expression, order_by=None, separator=',', **extra):
 | |
|         order_by_clause = ''
 | |
|         if order_by is not None:
 | |
|             order = 'ASC'
 | |
|             prefix, body = order_by[1], order_by[1:]
 | |
|             if prefix == '-':
 | |
|                 order = 'DESC'
 | |
|             elif prefix == '+':
 | |
|                 pass
 | |
|             else:
 | |
|                 body = order_by
 | |
|             order_by_clause = f'ORDER BY {body} {order}'
 | |
| 
 | |
|         super().__init__(
 | |
|             expression,
 | |
|             order_by=order_by_clause,
 | |
|             separator=f"SEPARATOR '{separator}'",
 | |
|             **extra
 | |
|         )
 |