django QuerySet遇到的几个DateTimeField格式的查询过滤问题

我最近写了一个需求,获取用户最近一日,周,月,总的收入详情,我也是在网上找了一部分资料,然后自己实验,写完了代码,分享给大家

now = datetime.datetime.now()
	# 打印day_start之后得到的是 2019-04-16 19:16:26.150070 表示现在的前24个小时
day_start = now - datetime.timedelta(hours=23, minutes=59, seconds=59)
	# 然后我看源码 还有周,日 毫秒,微秒等等 

class timedelta(SupportsAbs[timedelta]):
    min: ClassVar[timedelta]
    max: ClassVar[timedelta]
    resolution: ClassVar[timedelta]

    if sys.version_info >= (3, 6):
        def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
                     milliseconds: float = ..., minutes: float = ..., hours: float = ...,
                     weeks: float = ..., *, fold: int = ...) -> None: ...
    else:
        def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
                     milliseconds: float = ..., minutes: float = ..., hours: float = ...,
                     weeks: float = ...) -> None: ...
 # 分别拿到 周 月 是得到现在的时间之前的一周和一个月  然后在queryset中 使用addtime__gte 小于等于的时间格式去过滤,就可以得到所有这个时间段的数据
week_start = now - datetime.timedelta(weeks=1)
month_start = now - datetime.timedelta(days=30)

下面是Date TimeField QuerySet查询常用的几个参数

1、lt:小于
queryset=yourobject.objects .filter(时间字段名称__lt=start)

2、lte:小于等于
queryset=yourobject.objects .filter(时间字段名称__lte=start)

3、gt:大于某个时间
now = datetime.datetime.now()
#前一天
start = now – datetime.timedelta(hours=23, minutes=59, seconds=59)

start = now+datetime.timedelta(day=-1)
queryset=MemberRole.objects .filter(时间字段名称__gt=start)

4、gte:大于等于某个时间:
queryset=MemberRole.objects .filter(时间字段名称__gte=start)

5、year:查询某年
MemberRole.objects.filter(时间字段名称__year=2005)

6、month:查询某月
MemberRole.objects.filter(时间字段名称__month=12)

7、day:某天
MemberRole.objects.filter(时间字段名称__day=3)

8、week_day:星期几
MemberRole.objects.filter(时间字段名称__week_day=2)

9、range:查询时间段
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)

10、获取上个月第一天和最后一天

import datetime
fist = datetime.date(datetime.date.today().year,datetime.date.today().month-1,1)
last = datetime.date(datetime.date.today().year,datetime.date.today().month,1)-datetime.timedelta(1)

你可能感兴趣的:(python)