Python Django集团的工作日?

Python Django集团的工作日?,python,django,python-3.x,django-1.5,Python,Django,Python 3.x,Django 1.5,我使用的是Django 1.5.1和Python3.3.x,不能使用原始查询 对于使用日期范围筛选器的查询集,是否有方法获取按工作日分组的查询集?我试图按工作日对结果进行分组,查询范围在任意两个日期之间(可能相隔一年)。我知道该怎么做,但这需要用7个查询来重击数据库,以便找出每个工作日的数据 几个小时以来,我一直在尝试使用\uuuweek\uday过滤器进行不同的调整,试图解决这个问题,但没有任何效果。甚至谷歌搜索也没用,这让我怀疑这是否可能。如果可能的话,这里的任何Django大师都知道如何做

我使用的是Django 1.5.1和Python3.3.x,不能使用原始查询

对于使用日期<代码>范围筛选器的查询集,是否有方法获取按工作日分组的查询集?我试图按工作日对结果进行分组,查询范围在任意两个日期之间(可能相隔一年)。我知道该怎么做,但这需要用7个查询来重击数据库,以便找出每个工作日的数据


几个小时以来,我一直在尝试使用
\uuuweek\uday
过滤器进行不同的调整,试图解决这个问题,但没有任何效果。甚至谷歌搜索也没用,这让我怀疑这是否可能。如果可能的话,这里的任何Django大师都知道如何做吗?

好吧,伙计,我做了一个算法,这个算法为你带来了从本周(周一)开始到今天的所有记录

例如,如果您的应用程序中有这样的模型:

from django.db import models

class x(models.Model):
        date = models.DateField()

from datetime import datetime
from myapp.models import x
start_date = datetime.date(datetime.now())
week = start_date.isocalendar()[1]
day_week =start_date.isoweekday()
days_quited = 0
less_days = day_week
while less_days != 1:
     days_quited += 1
     less_days -= 1

week_begin = datetime.date(datetime(start_date.year,start_date.month,start_date.day-days_quited))

records = x.objects.filter(date__range=(week_begin, datetime.date(datetime.now())))
如果你在管理员中添加了一些介于6月17日(星期一)和6月22日(今天)之间的记录,你将看到所有这些记录,如果你添加了更多记录,例如明天的日期或下周一的日期,你将看不到这些记录

如果您想查看前一周的记录,您只需填写以下内容:

start_date = datetime.date(datetime(year, month, day))
records = x.objects.filter(date__range=(week_begin, datetime.date(datetime.now())))

希望这有帮助!:D

您需要在选择中添加一个额外的工作日字段,然后在总和或平均聚合中按该字段分组。请注意,这将成为一个特定于数据库的查询,因为“extra”符号将传递给DB select语句

鉴于模型:

class x(models.Model):
    date = models.DateField()
    value = models.FloatField()
然后,对于mysql,使用ODBC工作日到python datetime工作日的映射:

x.objects.extra(select={'weekday':"MOD(dayofweek(date)+5,7)"}).values('weekday').annotate(weekday_value=Avg('value'), weekday_value_std=StdDev('value'))
请注意,如果您不需要将MySql ODBC工作日(1=周日,2=周一…)转换为python工作日(周一为0,周日为6),那么您就不需要进行模运算。

对于这样的模型:

class A(models.Model):
    date = models.DateField()
    value = models.FloatField()
您可以使用查询:

weekday     = {"w": """strftime('%%w', date)"""}
qs = A.objects.extra(select=weekday).values('w').annotate(stat = Sum("value")).order_by()

由于不推荐使用
extra
,因此这里提供了一种在一周中的某一天使用进行分组的新方法

这将返回如下结果:

[{'weekday': 1, 'count': 534}, {'weekday': 2, 'count': 574},.......}

还需要注意的是,1=周日和周六=7

这只是一个日期范围,而不是分组。当日期范围跨越多周时,它将不起作用。我认为这相当于
Model.objects.filter(date\uu week=week\u number)
,您指的是连续多周?以及5个版本的django之后,添加了
ExtractWeekDay
关键字。注意:仍然需要使用django 1.5中的.extra()函数(按要求)。
[{'weekday': 1, 'count': 534}, {'weekday': 2, 'count': 574},.......}