我需要找到在
中创建的总对象1. current year
2. current month
3. last month
4. last year
我在想这个
this_year = datetime.now().year
last_year = datetime.now().year -1
this_month = datetime.now().month
last month = (datetime.today() - timedelta(days=30)).month
使用
Order.objects.filter(created_at__month=this_month)
问题是
答案 0 :(得分:16)
today = datetime.datetime.now()
1当前年度
Order.objects.filter(created_at__year=today.year)
2当月
Order.objects.filter(created_at__year=today.year, created_at__month=today.month)
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)
4去年
last_year = today.year - 1
Order.objects.filter(created_at__year=last_year)
5单一查询
由于去年+当前年份包括上个月和当月,并且所有订单> = last_year包括当前年份,查询非常简单:
Order.objects.filter(created_at__year__gte=last_year)
答案 1 :(得分:0)
如果您想在单独的查询中使用它,请执行类似的操作。
from_this_year = Order.objects.filter(created_at__year=this_year)
from_last_year = Order.objects.filter(created_at__year=last_year)
from_june = Order.objects.filter(created_at__month='06',created_at__year=this_year)
from_this_month = Order.objects.filter(created_at__month=this_month,created_at__year=this.year)
注意:在我的例子中,我把' 06'那是六月,但你可以改变它。
答案 2 :(得分:0)
我不认为你能够匹配"月"或者"年"日期字段的一部分,没有一些重要的小提琴或注释。最有可能的是,您最简单的解决方案是定义所需范围的开始和结束,然后对其进行搜索。这可能涉及一些工作。
例如,上个日历月将为:
today = datetime.now()
if today.month == 1:
last_month_start = datetime.date(today.year-1, 12, 1)
last_month_end = datetime.date(today.year-1, 12, 31)
else:
last_month_start = datetime.date(today.year, today.month -1, 1)
last_month_end = datetime.date(today.year, today.month, 1) - datetime.timedelta(days=1)
Order.objects.filter(created_at__gte=last_month_start, created_at__lte=last_month_end)
GTE和LTE大于或等于"和"小于或等于"。另外值得注意的是,我们使用timedelta来确定本月第一天的前一天是什么,而不是经历上个月是否有28天,29天,30天或31天的所有不同情况。