0

I would like get number of customers for each hour of the day. This my model:

class Client(models.Model):
    id_track=models.IntegerField(default=0)
    temps_attente=models.CharField(max_length=50)
    date_entree = models.DateTimeField(auto_now_add=True)
    camera = models.ForeignKey("Camera", on_delete=models.CASCADE)

    class Meta:
        verbose_name = "Client"
        ordering = ['camera']
    
    def __str__(self):
        return self.temps_attente

I want something like this :

[
{date:02/09/2020 , hour:"09" ,nbrCustumer:30}
{date:02/09/2020 , hour:"10" ,nbrCustumer:22 }
{date:02/09/2020 , hour:"11" ,nbrCustumer:10}
{date:02/09/2020 , hour:"12h ,nbrCustumer:12}
]
hrokr
  • 3,276
  • 3
  • 21
  • 39

1 Answers1

1

You can use GROUP BY expression as

from django.db.models import Count
from django.db.models.functions import ExtractHour
from django.utils import timezone

result = Client.objects.filter(
    date_entree__date=timezone.now().date()
).annotate(
    hour=ExtractHour('date_entree')
).values('hour').annotate(count=Count('hour'))

The result will be as,

[{'hour': 2, 'count': 1}, {'hour': 18, 'count': 1}]

References

JPG
  • 82,442
  • 19
  • 127
  • 206