我假设您要查找的是属于前一周同一日历周的所有条目。
这应该可以解决问题:
class Entry(models.Model):
pub_date = models.DateField([...])
要获取对象:
from datetime import timedelta
from django.utils import timezone
some_day_last_week = timezone.now().date() - timedelta(days=7)
monday_of_last_week = some_day_last_week - timedelta(days=(some_day_last_week.isocalendar()[2] - 1))
monday_of_this_week = monday_of_last_week + timedelta(days=7)
Entry.objects.filter(created_at__gte=monday_of_last_week, created_at__lt=monday_of_this_week)
请注意,我添加了 7 天来获取本周的星期一,而不是添加 6 天来获取上周的星期日,并且我使用了 created_at__lt=monday_of_this_week(而不是 __lte=)。我这样做是因为如果您的 pub_date 是 DateTimeField,则它不会包含星期日对象,因为使用 now().date() 时的时间是 00:00:00。
这可以很容易地调整为将星期日视为一周的第一天,但 isocalendar() 认为它是最后一天,所以我同意了。
如果使用 Django < 1.4,请使用以下内容:
from datetime import date, timedelta
some_day_last_week = date.today() - timedelta(days=7)
代替:
from datetime import timedelta
from django.utils import timezone
some_day_last_week = timezone.now().date() - timedelta(days=7)