Witam,
któryś dzień już podchodzę do tematu i nie mogę sobie dać rady.
from django.db import models
import datetime
from django.utils.timezone import utc
class Kategoria(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Miesiac(models.Model):
name = models.CharField(max_length=15)
def __str__(self):
return self.name
class Zakup(models.Model):
category = models.ForeignKey(Kategoria, on_delete=models.CASCADE, default=1)
month = models.ForeignKey(Miesiac, on_delete=models.CASCADE, default=datetime.datetime.now().month)
name = models.CharField(max_length=30)
price = models.FloatField(default=0.1)
quantity = models.IntegerField(default=1)
total= models.FloatField(default=0.1)
date = models.DateField(auto_now_add=True, blank=True)
def amount(self):
value = (self.price * self.quantity)
return value
def __str__(self):
return self.name
>>> m = Zakup.objects.filter(month__name="sierpien").values('name', 'price', 'quantity', 'total', 'category__name')
>>> m
<QuerySet [{'name': 'jeden', 'price': 2.0, 'quantity': 2, 'total': 4.0, 'category__name': 'jedzenie'}, {'name': 'dwa', 'price': 3.0, 'quantity': 3, 'total': 9.0, 'category__name': 'jedzenie'}, {'name': 'totals', 'price': 6.0, 'quantity': 10, 'total': 60.0, 'category__name': 'jedzenie'}, {'name': 'jablko', 'price': 1.5, 'quantity': 4, 'total': 6.0, 'category__name': 'jedzenie'}, {'name': 'paliwo', 'price': 100.0, 'quantity': 1, 'total': 100.0, 'category__name': 'samochod'}]>
>>> m = Zakup.objects.filter(month__name="sierpien").values('name', 'price', 'quantity', 'total', 'category__name').aggregate(Sum('total'))
>>> m
{'total__sum': 179.0}
Kiedy robię agregację, wszystko poza argumentem Sum, jest wycinane z wyniku. Chciałbym to mieć w formie:
'month__name', 'category__name', Sum('total')
Da się to zrobić jednym zapytaniem, czy powinienem zrobić kilka?
Podpowiedzcie coś :-|