Ошибка Объект 'FloatField' не имеет атрибута 'aggregate' - в отчете на Django с суммой итогов
Я пытаюсь сформировать список с общим количеством продаж за месяц в текущем году. В моей модели у меня есть поле total, которое является итогом каждой продажи. Я создаю цикл (for) из 12 проходов, по одному на каждый месяца, и хочу получить итог каждого из месяцев.
.Это модель
class Sale(models.Model):
cli = models.ForeignKey(Client, on_delete=models.CASCADE)
date_joined = models.DateField(default=datetime.now)
subtotal = models.DecimalField(default=0.00, max_digits=9, decimal_places=2)
iva = models.DecimalField(default=0.00, max_digits=9, decimal_places=2)
total = models.DecimalField(default=0.00, max_digits=9, decimal_places=2)
def __str__(self):
return self.cli.names
def toJSON(self):
item = model_to_dict(self)
item['cli'] = self.cli.toJSON()
item['subtotal'] = format(self.subtotal, '.2f')
item['iva'] = format(self.iva, '.2f')
item['total'] = format(self.total, '.2f')
item['date_joined'] = self.date_joined.strftime('%Y-%m-%d')
item['det'] = [i.toJSON() for i in self.detsale_set.all()]
return item
class Meta:
verbose_name = 'Venta'
verbose_name_plural = 'Ventas'
ordering = ['id']
Это вид, в котором происходит ошибка...
from django.views.generic import TemplateView
from datetime import datetime
from django.db.models.functions import Coalesce
from django.db.models import *
from Curso3App.models import Sale
class DashboardView(TemplateView):
template_name= 'Curso3App/dashboard.html'
def get_GraficoVentasPorMes(self):
data=[]
year = datetime.now().year
for mes in range(1,13):
total = Sale.objects.filter(date_joined__year = year,date_joined__month = mes)
total = total.aggregate(r = Coalesce(Sum('total'), 0)).get('r',0).output_field=FloatField()
#total = total.aggregate(r = Coalesce(Sum('total'), 0)).get('r',0).output_field=FloatField()
data.append(total)
print('total ',total)
return data
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['panel'] = 'Panel de Administracion'
context['GraficoVentasPorMes']=self.get_GraficoVentasPorMes()
return context
Это ошибка
AttributeError at /Dashboard/ 'FloatField' object has no attribute 'aggregate' Метод запроса: Запрос GET URL: http://127.0.0.1:8000/Dashboard/ Версия Django: 4.0.4 Исключение Тип: AttributeError Exception Value: 'FloatField' object has no атрибут 'aggregate' Исключение Местоположение: C:\Users\HP\Documents\ProyectosDjango\Curso3\Curso3\Curso3App\views\Dashboard\views.py, строка 17, in get_GraficoVentasPorMes Python Исполняемый файл: C:\Users\HP\AppData\Local\Programs\Python\Python310\python.exe Версия Python: 3.10.4 Путь к Python: ['C:\Users\HP\Documents\ProyectosDjango\Curso3\Curso3', 'C:\Users\HP\AppData\Local\Programs\Python\Python310\python310.zip', 'C:\Users\HP\AppData\Local\Programs\Python\Python310\DLLs', 'C:\Users\HP\AppData\Local\Programs\Python\Python310\lib', 'C:\Users\HP\AppData\Local\Programs\Python\Python310', 'C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\site-packages']. Время сервера: Tue, 24 May 2022 20:33:19 +0000
.
А в VisualCode Terminal выдает такую ошибку
Метод запроса: GET Запрос URL: http://127.0.0.1:8000/Dashboard/
.Django Version: 4.0.4 Версия Python: 3.10.4 Установленные приложения: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'widget_tweaks', 'Curso3App', 'homepage', 'login', 'reports']. Установленное промежуточное ПО: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'crum.CurrentRequestUserMiddleware']
.Traceback (последний последний вызов): Файл "C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py", строка 55, в inner response = get_response(request) Файл "C:\Users\HP\AppData\Local\Programs\Python\Python\Python310\lib\site-packages\django\core\handlers\base.py", строка 197, в _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\site-packages\django\views\generic\base.py", строка 84, в view return self.dispatch(request, *args, **kwargs) File "C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\site-packages\django\views\generic\base.py", строка 119, в dispatch return handler(request, *args, **kwargs) Файл "C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\site-packages\django\views\generic\base.py", строка 185, в get context = self.get_context_data(**kwargs) Файл "C:\Users\HP\Documents\ProyectosDjango\Curso3\Curso3\Curso3App\views\Dashboard\views.py", строка 25, в get_context_data context['GraficoVentasPorMes']=self.get_GraficoVentasPorMes() File "C:\Users\HP\Documents\ProyectosDjango\Curso3\Curso3\Curso3App\views\Dashboard\views.py", строка 17, в get_GraficoVentasPorMes total = total.aggregate(r = Coalesce(Sum('total'), 0)).get('r',0).output_field=FloatField()
.Тип исключения: AttributeError at /Dashboard/ Exception Value: 'FloatField' object has no attribute 'aggregate'
Я использую это выражение в представлении, которое казалось мне правильным, но оно выдает мне ошибку ошибку данных агрегата и миксина. Я не знаю, что делать....
.
total = Sale.objects.filter(date_joined__year = year,date_joined__month = mes)
total = total.aggregate(r = Coalesce(Sum('total'), 0)).get('r',0).output_field=FloatField()