首页 > 解决方案 > 如何在 Django 中显示今天、昨天和过去 7 天的数据?

问题描述

我想显示 的数据todayyesterday最后7 days,请让我知道我该怎么做。

我正在尝试这个..但它只显示最近 7 天的数据,但我想根据 显示我的 HTML 文件中的数据,today这 是我的文件..yesterdaylast 7 daysviews.py

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}

这是我的test.html文件,我在其中显示数据...

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

标签: djangodjango-modelsdjango-viewsdjango-templatesdjango-filter

解决方案


此查询将给出一个聚合结果并在模板中适当地使用它

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())),
)

更新

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)

然后在你的模板中,

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

推荐阅读