0

I'm trying to aggregate Sum() to a queryset, the fields are simple IntegerField() but this error appears.

Error:

The above exception was the direct cause of the following exception:
 
 Traceback (most recent call last):
   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
     response = get_response(request)
   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
     response = self.process_exception_by_middleware(e, request)
   File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
     response = wrapped_callback(request, *callback_args, **callback_kwargs)
   File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
     return view_func(*args, **kwargs)
   File "/usr/local/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
     return self.dispatch(request, *args, **kwargs)
   File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 495, in dispatch
     response = self.handle_exception(exc)
   File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 455, in handle_exception
     self.raise_uncaught_exception(exc)
   File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 492, in dispatch
     response = handler(request, *args, **kwargs)
   File "/opt/companies/api/v2/views.py", line 86, in get
     ticket_closed_time=Avg(F("ticket_closed_time")),
   File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 379, in aggregate
     return query.get_aggregation(self.db, kwargs)
   File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/query.py", line 489, in get_aggregation
     result = compiler.execute_sql(SINGLE)
   File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1100, in execute_sql
     cursor.execute(sql, params)
   File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 99, in execute
     return super().execute(sql, params)
   File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
     return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
   File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
   File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
     raise dj_exc_value.with_traceback(traceback) from exc_value
   File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
 django.db.utils.ProgrammingError: function sum(jsonb) does not exist
 LINE 1: ...aggregation"."ticket_closed") AS "ticket_closed", SUM("ticke...
                                                              ^
 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Code:

 ticket_history_aggregation = TicketHistoryAggregation.objects.filter(
            aggregation_date__date__gte=date_from,
            aggregation_date__date__lte=date_to,
            category=categories,
            # stores=stores,
            team=teams,
        )

if ticket_history_aggregation.count() > 1:

            ticket_history_aggregation = ticket_history_aggregation.aggregate(
                ticket_total=Sum("ticket_total"),
                ticket_queue=Sum("ticket_queue"),
                ticket_queue_expiring=Sum("ticket_queue_expiring"),
                ticket_processing_expiring=Sum("ticket_processing_expiring"),
                ticket_pending=Sum("ticket_pending"),
                ticket_solved=Sum("ticket_solved"),
                ticket_unapplicable=Sum("ticket_unapplicable"),
                ticket_processing=Sum("ticket_processing"),
                ticket_closed=Sum("ticket_closed"),
                ticket_store=Sum("ticket_store"),
                ticket_store_managed=Sum("ticket_store_managed"),
                ticket_store_total=Sum("ticket_store_total"),
                ticket_queue_w_time=Avg("ticket_queue_w_time"),
                ticket_pending_w_time=Avg("ticket_pending_w_time"),
                ticket_processing_w_time=Avg("ticket_processing_w_time"),
                ticket_working_w_time=Avg("ticket_working_w_time"),
                ticket_closed_w_time=Avg("ticket_closed_w_time"),
               # ticket_public_post_processed_w_time=Sum(
               #     F("ticket_public_post_processed_w_time")
               # ),
                ticket_queue_time=Avg("ticket_queue_time"),
                ticket_pending_time=Avg("ticket_pending_time"),
                ticket_processing_time=Avg("ticket_processing_time"),
                ticket_working_time=Avg("ticket_working_time"),
                ticket_closed_time=Avg("ticket_closed_time"),
            )

Model:

class TicketHistoryAggregation(models.Model):

    ticket_total = models.IntegerField(_("Ticket Totali"),default=0)
    ticket_queue = models.IntegerField(_("Totale Ticket Queue"), default=0)
    ticket_queue_expiring = models.IntegerField(_("Totale Ticket Queue Expiring"), default=0)
    ticket_processing_expiring = models.IntegerField(_("Totale Ticket Procesing Expiring"), default=0)
    ticket_pending = models.IntegerField(_("Totale Ticket Pending"), default=0)
    ticket_solved = models.IntegerField(_("Totale Ticket Solved"), default=0)
    ticket_unapplicable = models.IntegerField(_("Totale Ticket Unapplicable"), default=0)
    ticket_processing = models.IntegerField(_("Totale Ticket Processing"), default=0)
    ticket_closed = models.IntegerField(_("Totale Ticket Closed"), default=0)
    ticket_public_post_processed = models.IntegerField(_("Totale Ticket Public Post Processed"), default=0)
    ticket_store = JSONField(_("Totale Ticket Stored"), blank=True, default=dict)
    ticket_store_managed = JSONField(_("Totale Ticket Managed Stored"), blank=True, default=dict)
    ticket_store_total = JSONField(_("Totale Ticket Total Stored"), blank=True, default=dict)


    ticket_queue_w_time = models.IntegerField(_("Totale Tempo Queue"), default=0)
    ticket_pending_w_time = models.IntegerField(_("Totale Tempo Pending"), default=0)
    ticket_processing_w_time = models.IntegerField(_("Totale Tempo Processing"), default=0)
    ticket_working_w_time = models.IntegerField(_("Totale Tempo Lavorazione"), default=0)
    ticket_closed_w_time = models.IntegerField(_("Totale Tempo Closed"), default=0)
    ticket_public_post_processed_w_time = models.IntegerField(_("Totale Tempo Public Post Processed"), default=0)


    ticket_queue_time = models.IntegerField(_("Totale Tempo Queue"), default=0)
    ticket_pending_time = models.IntegerField(_("Totale Tempo Pending"), default=0)
    ticket_processing_time = models.IntegerField(_("Totale Tempo Processing"), default=0)
    ticket_working_time = models.IntegerField(_("Totale Tempo Lavorazione"), default=0)
    ticket_closed_time = models.IntegerField(_("Totale Tempo Closed"), default=0)

    ticket_public_post_processed_time = models.IntegerField(_("Totale Tempo Public Post Processed"), default=0)

Django Ver: 2.2.3

Postgres: 12

I tried with: ticket_queue=Sum(F("ticket_closed")), and ticket_queue=Sum(Cast(F("ticket_closed"), output_field=IntegerField())

But the error is still there, it's the first time it happens to me, by the way they are simple integer fields. Do you know what I can feel or where I'm wrong? Thanks for the help

2
  • Is there any way you could share the TicketHistoryAggregation model definition? It will probably help Commented Sep 30, 2021 at 21:04
  • @Agate question update Commented Oct 1, 2021 at 7:01

1 Answer 1

1

I think there lies the issue: you are trying to Sum several fields that are declared as JSONField on your model:

ticket_store=Sum("ticket_store"),
ticket_store_managed=Sum("ticket_store_managed"),
ticket_store_total=Sum("ticket_store_total"),

You either have an issue in your model definition or in the aggregate clause

Sign up to request clarification or add additional context in comments.

1 Comment

Yes correct, i changed the logic and works! Thank you!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.