我要做的是从周一到周五获取过滤器,然后根据过滤器计算对象。这就是我到目前为止所做的:
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))
它有效,但不是以正确的方式,现在我可以开始工作的开始是当天。我怎么从星期一到星期日(每周)开始呢?而不是当前日期,所以当有人查看用户名票关闭的计数时,它只会在那一周落下。我希望这是有道理的。
答案 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)