je les modèles suivants (simplifié):Django Groupement de requêtes
class Donation(models.Model):
entry_date = models.DateTimeField()
class Category(models.Model):
name = models.CharField()
class Item(models.Model):
donation = models.ForeignKey(Donation)
category = models.ForeignKey(Category)
Je suis en train d'afficher le nombre total d'éléments, par catégorie, regroupés par l'année du don.
J'ai essayé ceci:
Donation.objects.extra(select={'year': "django_date_trunc('year',
%s.entry_date)" % Donation._meta.db_table}).values('year',
'item__category__name').annotate(items=Sum('item__quantity'))
Mais je reçois une erreur de terrain sur item__category__name
.
J'ai aussi essayé:
Item.objects.extra(select={"year": "django_date_trunc('year',
entry_date)"}, tables=["donations_donation"]).values("year",
"category__name").annotate(items=Sum("quantity")).order_by()
Ce qui me fait généralement ce que je veux, mais le nombre de quantité d'articles est multiplié par le nombre d'enregistrements de dons.
Des idées? Fondamentalement, je veux afficher ceci:
2010 - Category 1: 10 items - Category 2: 17 items 2009 - Category 1: 5 items - Category 3: 8 items
Je suis sur Django 1.1.1 - J'aurais dû le mentionner. Je peux faire la requête "Éléments par catégorie" comme répondue plus bas dans ce fil très bien, ce que je ne peux pas comprendre comment faire est de le faire à travers trois modèles - Articles par catégorie regroupés par date de don. C'est le troisième composant que je suis perdu. – Matt
@matt Les requêtes django sont conçues pour être flexibles, mais il arrive parfois que vous ne puissiez pas utiliser une requête django pour effectuer le travail. Dans ce cas, vous pouvez envisager d'utiliser la solution SQL directe. Ce serait probablement plus lisible aussi à ce stade. http://docs.djangoproject.com/fr/dev/topics/db/sql/#topics-db-sql – dlamotte
J'avais peur de ça. Maintenant, pour comprendre le SQL brut pour cette requête;) – Matt