Requête Django pour les lignes avec des valeurs de champ en double
Supposons que nous ayons un modèle Django avec un champ non unique. Nous devons sélectionner toutes les lignes du modèle qui ont au moins une valeur en double pour ce champ.
Approche SQL simple
Une solution possible consiste à utiliser du SQL simple :
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT(*) > 1 );
Approche ORM de Django
Utilisation de Django ORM, nous pouvons obtenir le même résultat avec une combinaison de valeurs(), annotate(), order_by() et filter() :
from django.db.models import Count dupes = Literal.objects.values('name') \ .annotate(Count('id')) \ .order_by() \ .filter(id__count__gt=1)
Comme le code ci-dessus renvoie un ValuesQuerySet, nous devons convertir vers un QuerySet normal pour l'utiliser comme filtre :
duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])
Cette approche garantit que nous sélectionnons uniquement les lignes avec des valeurs de nom en double.
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!