-1

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>
saini tor
  • 223
  • 6
  • 21

2 Answers2

2

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>
JPG
  • 82,442
  • 19
  • 127
  • 206
0

try something like this:

from django.shortcuts import render

def days(request):
    
    week = Mymodel.objects.filter(created_on_gte=datetime.now()-timedelta(days=7)).count()
    yesterday = Mymodel.objects.filter(created_on_gte=datetime.now()-timedelta(days=1)).count()
    today = Mymodel.objects.filter(created_on_gte=datetime.now())

    context = {
        'week': week,
        'yesterday' : yesterday,
        'today' : today,
    }
return render(request, 'days.html', context)

.html

<p>{{today}} today</p>
<p>{{yesterday}} Yesterday</p>
<p>{{week}} Last 7 Days</p>
HermanTheGerman
  • 232
  • 1
  • 8