use of annotate in django query

65 views
Skip to first unread message

Eugene TUYIZERE

unread,
Jun 2, 2021, 3:42:27 PM6/2/21
to django...@googlegroups.com
Dear Team,

I need help. I am working on a project where one of the tables is about requests. I want to have a report of the number of requests on each day in the last 30 days, something like this:
image.pngI I used the code below just before displaying on the chart but the code gives me wrong information

def reqChart(request):
current_date = date.today()
days_before = date.today()-timedelta(days=30)
for dt in daterange(days_before,current_date):
reports = Customer_Requests.objects.filter(arrival_date__gte=dt).\
extra({'day':"date(arrival_date)"}).\
values('arrival_date').annotate(count=Count('request_name'))
print(reports)


And I need help
--
TUYIZERE Eugene

Msc Degree in Mathematical Science

African Institute for Mathematical Sciences (AIMS Cameroon)
Crystal Garden-Lime, Cameroon


Bsc in Computer Science

UR-Nyagatare Campus

Email: eugene....@aims-cameroon.org
           eugenet...@gmail.com

Tel: (+250) 7 88 26 33 38, (+250) 7 22 26 33 38

Sebastian Jung

unread,
Jun 2, 2021, 3:53:15 PM6/2/21
to django...@googlegroups.com
Hi Eugene,

Please make Print(report.query) then you get SQL querys and Most of time i get an Idea what's wrong

Regards

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CABxpZHstWyfMVKQhJb%3DxGKff3p3V%2BFQ_w3DkYVpOe-pEW2ySKg%40mail.gmail.com.

Eugene TUYIZERE

unread,
Jun 2, 2021, 3:57:31 PM6/2/21
to django...@googlegroups.com
Dear Sebatian,

This is what I get:

SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-03 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-04 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-05 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-06 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-07 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-08 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-09 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-10 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-11 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-12 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-13 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-14 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-15 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-16 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-17 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-18 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-19 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-20 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-21 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-22 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-23 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-24 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-25 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-26 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-27 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-28 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-29 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-30 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-05-31 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-06-01 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL
SELECT `crms_customer_requests`.`arrival_date`, COUNT(`crms_customer_requests`.`request_name`) AS `count` FROM `crms_customer_requests` WHERE `crms_customer_requests`.`arrival_date` >= 2021-06-02 GROUP BY `crms_customer_requests`.`arrival_date` ORDER BY NULL

Eugene TUYIZERE

unread,
Jun 2, 2021, 4:32:32 PM6/2/21
to django...@googlegroups.com
in brief, I want to transform this query in django query

image.png

Lalit Suthar

unread,
Jun 3, 2021, 12:51:21 AM6/3/21
to django...@googlegroups.com
> in brief, I want to transform this query in django query
this will be equivalent to this query in django 
Customer_Requests.objects.values("arrival_date").annotate(num_req=Count("request_name"))


Eugene TUYIZERE

unread,
Jun 3, 2021, 1:52:16 AM6/3/21
to django...@googlegroups.com
Dear Latit,

Thank you very much. Now how can I display 30 last records? Regardless of how many records I may have ! Just the last 30 records!

Thank you

DJANGO DEVELOPER

unread,
Jun 3, 2021, 2:07:26 AM6/3/21
to django...@googlegroups.com
to display last 30 records you can write your code like this: Customer_Requests.objects.all()[-30]

lalit suthar

unread,
Jun 3, 2021, 2:59:31 AM6/3/21
to Django users
this will do 
Customer_Requests.objects.values("arrival_date").annotate(num_req=Count("request_name")).order_by("-id")[:30:-1]

Eugene TUYIZERE

unread,
Jun 3, 2021, 6:48:15 AM6/3/21
to django...@googlegroups.com
Dear Suthar,

Your idea works well , but I want now to display the result on chart. Below is the code I am trying to use:
but Am getting the error message:

Exception Value:
Object of type date is not JSON serializable

def reqChart(request):
aa = Customer_Requests.objects.values("arrival_date").annotate(num_req=Count("request_name")).order_by('-arrival_date')[:20:-1]
print(aa)
datesb = list()
sumdata = list()
for dd in aa:
datesb.append(dd['arrival_date'])
sumdata.append(dd['num_req'])
arriva_days = {
'name': 'Datess',
'data': sumdata,
'color': 'green'
}
chart3 = {
'chart': {'type': 'column'},
'title': {'text': 'Previous statistics'},
'xAxis': {'datesb': datesb},
'series': [arriva_days]
}
dump3 = json.dumps(chart3)
return render(request,'summarizedchart.html',{'chart3': dump3})

Please once again

regards, 



lalit suthar

unread,
Jun 3, 2021, 7:26:42 AM6/3/21
to Django users
Hi there! 
make these couple of changes 

1) from django.core.serializers.json import DjangoJSONEncoder
2) dump3 = json.dumps(chart3, cls=DjangoJSONEncoder)

Eugene TUYIZERE

unread,
Jun 3, 2021, 8:14:21 AM6/3/21
to django...@googlegroups.com
Dear Suthar,

You saved my day. Once more, the chart is displayed but the date is not displayed on Xaxis. This how it is:

image.png

Th codes are:
def reqChart(request):
current_date = date.today()
days_before = date.today()-timedelta(days=30)
datelist = Customer_Requests.objects.values("arrival_date").annotate(num_req=Count("request_name")).order_by('-arrival_date')[:20:-1]
replist = list()
sumdata = list()
for listd in datelist:
replist.append(listd['arrival_date'])
sumdata.append(listd['num_req'])
arriva_days = {
'name': 'Datess',
'data': sumdata,
'color': 'green'
}
chart = {
'chart': {'type': 'column'},
'title': {'text': 'Previous statistics'},
'xAxis': {'replist': replist},
'series': [arriva_days]
}
dump = json.dumps(chart,cls=DjangoJSONEncoder)
return render(request,'summarizedchart.html',{'chart': dump})


Lalit Suthar

unread,
Jun 3, 2021, 8:22:15 AM6/3/21
to django...@googlegroups.com
so the view is not giving error right now but maybe we are passing the data in different format then the chart is expecting.
What are you using for drawing the chart? can I see the code inside "summarizedchart.html"

Eugene TUYIZERE

unread,
Jun 3, 2021, 8:31:12 AM6/3/21
to django...@googlegroups.com
This what I have in summarizedchart.html:

{% extends "layouts/base.html" %}
{% load static %}
{% block title %} Repport {% endblock %}

<!-- Specific CSS goes HERE -->
{% block stylesheets %}{% endblock stylesheets %}

{% block content %}

<div class="pcoded-main-container">
<div class="pcoded-content">
<div class="col-lg-12">
<div class="card table-card">
<div class="card-header">
<h5>Report</h5>

<hr>

<script src="{% static 'assets/js/chart.js' %}"></script>

<div id="container"></div>
<script>
Highcharts.chart('container', {{ chart|safe }});
</script>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
{% block custom_js %}

{% endblock custom_js %}

Lalit Suthar

unread,
Jun 3, 2021, 10:48:11 AM6/3/21
to django...@googlegroups.com
not sure but maybe this can work inside views replace 
chart = {
      'chart': {'type': 'column'},
      'title': {'text': 'Previous statistics'},
      'xAxis': {'replist': replist},
      'series': [arriva_days]
}
with 
chart = {
      'chart': {'type': 'column'},
      'title': {'text': 'Previous statistics'},
      'xAxis': {'categories': replist},
      'series': [arriva_days]
}

Eugene TUYIZERE

unread,
Jun 3, 2021, 10:59:08 AM6/3/21
to django...@googlegroups.com
Dear Suthar,

Thank you very much. It works well.


Lalit Suthar

unread,
Jun 4, 2021, 12:25:00 AM6/4/21
to django...@googlegroups.com

Eugene TUYIZERE

unread,
Jun 5, 2021, 2:18:24 AM6/5/21
to django...@googlegroups.com
Dear Suthar,

Can I have your private contact?

regards, 

Lalit Suthar

unread,
Jun 5, 2021, 1:10:27 PM6/5/21
to django...@googlegroups.com

V. J

unread,
Jul 26, 2021, 10:25:31 AM7/26/21
to django...@googlegroups.com
Hello, I'm making a list of potential customers, in about two months, we will have a business plan ready and we will issue a digital token (ICO) based on our product in the company.  Would you be interested in learning more ...?

Dne so 5. čvn 2021 19:09 uživatel Lalit Suthar <sutharl...@gmail.com> napsal:
Reply all
Reply to author
Forward
0 new messages