如何在当前年份,django中查询当前年份的对象

use*_*546 5 python django datetime

我需要找到创建的总对象

1. current year
2. current month
3. last month
4. last year
Run Code Online (Sandbox Code Playgroud)

我在想这个

    this_year = datetime.now().year
    last_year = datetime.now().year -1
    this_month = datetime.now().month
    last month = (datetime.today() - timedelta(days=30)).month
Run Code Online (Sandbox Code Playgroud)

用得像

Order.objects.filter(created_at__month=this_month)

问题是

  1. last_month我想要的是日历月而不是30天
  2. 我不确定created_at__month = this_month是否与当前月份或上一年的同月相匹配
  3. 是否有可能在单个查询中获得所有计数

Jua*_*oco 20

today = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

1本年度

Order.objects.filter(created_at__year=today.year)
Run Code Online (Sandbox Code Playgroud)

2本月

Order.objects.filter(created_at__year=today.year, created_at__month=today.month)
Run Code Online (Sandbox Code Playgroud)

3上个月

last_month = today.month - 1 if today.month>1 else 12
last_month_year = today.year if today.month > last_month else today.year - 1

Order.objects.filter(created_at__year=last_month_year, created_at__month=last_month)
Run Code Online (Sandbox Code Playgroud)

4去年

last_year = today.year - 1
Order.objects.filter(created_at__year=last_year)
Run Code Online (Sandbox Code Playgroud)

5单个查询

由于去年+当前年度包括上个月和当月,并且所有订单> = last_year包括当前年份,查询非常简单:

Order.objects.filter(created_at__year__gte=last_year)
Run Code Online (Sandbox Code Playgroud)