Maison >base de données >tutoriel mysql >Comment obtenir la fonctionnalité GROUP_CONCAT de MySQL dans Django ?

Comment obtenir la fonctionnalité GROUP_CONCAT de MySQL dans Django ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 21:05:03696parcourir

How to Achieve MySQL's GROUP_CONCAT Functionality in Django?

L'équivalent de Django au GROUP_CONCAT de MySQL

Dans Django, GROUP_CONCAT n'est pas intégré, mais il peut être émulé à l'aide d'une fonction d'agrégation personnalisée.

Création d'une fonction d'agrégation personnalisée

Pour créer une fonction d'agrégation personnalisée pour GROUP_CONCAT, suivez ces étapes :

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)

Cette classe définit la fonction GROUP_CONCAT et son comportement.

Utilisation la fonction d'agrégation personnalisée

Pour utiliser votre fonction d'agrégation personnalisée, incluez-la simplement dans votre requête comme suit :

query_set = Fruits.objects.values('type').annotate(count=Count('type'),
                       name=Concat('name')).order_by('-count')

Cela renverra un QuerySet avec les résultats souhaités :

apple, 2, "fuji,mac"
orange, 1, "navel"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn