Search code examples
djangodjango-modelsdjango-viewsdjango-templatesdjango-filter

How to display data Today, Yesterday and last 7 Days in Django?


I want to display data of today, yesterday and last 7 days, please let me know how I can do it.

I am trying this....but it's displaying me only the last 7 days data, but I want to display data in my HTML file according to today, yesterday and last 7 days here is my views.py file..

def myview(request):
  datas= Mymodel.objects.filter(created_on_gte=datetime.now()- 
  timedelta(days=7)).count()
  context= {'datas':datas}
  return render(request, 'test.html', context}

here is my test.html file, where I am displaying data...

<p>{{datas}} today</p>
<p>{{datas}} Yesterday</p>
<p>{{datas}} Last 7 Days</p>

Solution

  • This query will give an aggregated result and use it appropriately in the template

    from django.utils import timezone
    from datetime import timedelta
    from django.db import models
    
    now = timezone.now()
    Mymodel.objects.aggregate(
        today=models.Count('id', filter=models.Q(created_on__date=now.date())),
        yesterday=models.Count('id', filter=models.Q(created_on__date__gte=(now - timedelta(hours=24)).date())),
        last_7_day=models.Count('id', filter=models.Q(created_on__date__gte=(now - timedelta(days=7)).date())),
    )

    UPDATE

    from django.utils import timezone
    from datetime import timedelta
    
    
    def myview(request):
        now = timezone.now()
        result = Mymodel.objects.aggregate(
            total=models.Count('id'),
            today=models.Count('id', filter=models.Q(created_on__date=now.date())),
            yesterday=models.Count('id', filter=models.Q(created_on__date__gte=(now - timedelta(hours=24)).date())),
            last_7_day=models.Count('id', filter=models.Q(created_on__date__gte=(now - timedelta(days=7)).date())),
        )
        context = {'result': result}
        return render(request, 'test.html', context)

    then in your template,

    <p>{{ result.today }} today</p>
    <p>{{ result.yesterday }} Yesterday</p>
    <p>{{ result.last_7_day }} Last 7 Days</p>