0

我想做的是从星期一到星期五获取一个过滤器,然后根据过滤器计算对象。这是我到目前为止所拥有的:

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

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

4

2 回答 2

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)
于 2014-01-09T08:06:16.447 回答
1

datetime在 python 中使用该模块:

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

更新:

要为工作日的日期使用布尔标志,您可以覆盖模型中的保存方法,然后调用该字段作为视图中的过滤器。

首先覆盖模型中的保存方法:

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)

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

于 2014-01-09T01:49:42.417 回答