Bonjour !
Je reviens vers vous car j’aimerais régler un problème en SQL et je n’y arrive pas pour le moment.
Pour faire simple, j’ai trois objets :
class Faction(models.Model):
name = name = models.CharField(max_length=255)
class ArmyList(models.Model):
faction = models.ForeignKey(Faction, on_delete=models.CASCADE)
class Subscription(models.Model):
army_list = models.ForeignKey(
ArmyList, on_delete=models.SET_NULL, null=True, blank=True
)
(Bien sûr je ne vous mets que les lignes pertinentes). Pour résumer le code ci-dessus : une inscription possède une liste d’armée, qui elle-même est rattachée à une faction qui possède un nom.
Dans ma vue, je récupère l’ensemble des Subscription
qui m’intéressent.
Ce que je voudrais : compter combien j’ai de Subscription
pour chaque Faction
, donc quelque chose qui ressemble à un dictionnaire {"faction1": 14}
.
Actuellement, je le fais dans le code python :
factions_count = defaultdict(lambda: 0)
for subscription in subscriptions:
factions_count[subscription.army_list.faction.name] += 1
Bien sûr ça fonctionne, mais je me demande si avec du SQL, il y aurait possibilité d’optimiser cela, mais je ne trouve pas du tout.
Avez-vous des idées ?