Django View中的周一至周五过滤计数

时间:2014-01-09 01:20:36

标签: django date filter count weekday

我要做的是从周一到周五获取过滤器,然后根据过滤器计算对象。这就是我到目前为止所做的:

def closed_by_count(request, template = 'count_closed_user.html'):

    date = datetime.now()

    week_1 = relativedelta(weeks=1)

    closed_by_count = Created_Ticket.objects.filter(closed_by__username='lastname.firstname').filter(date_closed__gte = date - week_1).filter(date_closed__lt = date).count()

    print closed_by_count

    payload = {'closed_by_count': closed_by_count,}    

    return render_to_response(template, payload, context_instance=RequestContext(request))

它有效,但不是以正确的方式,现在我可以开始工作的开始是当天。我怎么从星期一到星期日(每周)开始呢?而不是当前日期,所以当有人查看用户名票关闭的计数时,它只会在那一周落下。我希望这是有道理的。

2 个答案:

答案 0 :(得分:1)

使用python中的datetime模块:

http://docs.python.org/2/library/datetime.html#datetime.date.weekday

<强>更新

要对工作日的日期使用布尔标志,您可以覆盖模型中的save方法,然后调用然后在视图中将此字段称为过滤器。

首先覆盖模型中的save方法:

import datetime

class MyModel(models.Model):
    date = models.DateField(auto_add_now=True)
    is_weekday = models.BooleanField(blank=True)

    # other model fields

    def save(self, *args, **kwargs):
        self.is_weekday = 4 >= datetime.date.weekday(self.date) >= 0
        super(MyModel, self).save(*args, **kwargs)

然后使用is_weekday布尔标志从视图中过滤仅限工作日的对象:

weekday_objects = MyModel.objects.filter(is_weekday=True)

是的,根据您的评论,布尔标志是正确的。谢谢你抓住了。

答案 1 :(得分:1)

使用datetime模块找到当周的最后一个星期一:

import datetime
today = datetime.date.today()
last_monday = today - datetime.timedelta(days=today.weekday())
one_week = datetime.timedelta(days=7)
end_of_week = last_monday + one_week

然后您可以按如下方式运行查询:

closed_by_count = Created_Ticket.objects.filter(closed_by__username='lastname.firstname'
        ).filter(date_closed__gte = last_monday).filter(date_closed__lt = end_of_week).count()

这些使用天真的日期时间对象。您可以使用以下方法使用时区感知对象:

from django.utils.timezone import now
today = now().replace(hour=0,minute=0,second=0,microsecond=0)