问题描述
我使用的是 Python 3.9、Django 3.1 和 PostGres 10。我有以下查询来提供在特定日期范围内创建的文章...
qset = Article.objects.filter(
created_day__gte=start_date,created_day__lte=end_date
)
我想添加的是一个子句,用于指定在特定日期(例如星期一)创建的日期范围内创建的文章数量,其中一周中的天数由整数表示( 0 = 星期一,1 = 星期二,... 6 = 星期日)。如何添加一个也可以按星期几过滤的子句?
解决方法
在问题中出现的代码块之后。
您可以通过执行以下操作进一步过滤 qset:
monday_qset = qset.objects.filter(created_day__week_day=2)
从 1(星期日)到 7(星期六)的星期几。
您可以找到有关 this lookup here on django docs.
的更多详细信息 ,我们可以使用 ExtractWeekDay()
(Django-Docs) 和 Count()
:
from django.db.models.functions import ExtractWeekDay
from django.db.models import Count
qset = Article.objects.filter(
created_day__gte=start_date,created_day__lte=end_date
).annotate(
week_day=ExtractWeekDay("created_day")
).values(
"week_day"
).annotate(
count=Count("pk")
).order_by("week_day")
输出将是这样的:
<QuerySet [
{'count': 1098,'week_day': 2},{'count': 55,'week_day': 3},{'count': 29,'week_day': 4},{'count': 41,'week_day': 5},{'count': 25,'week_day': 6}
]>