Django计算当月创建的对象

dea*_*ase 5 django django-models django-orm

我的模型中有字段:

class Order(BaseModel):
    created_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我需要计算当前月份创建的所有Order对象.我怎么能在我的观点中这样做?

Ana*_*kov 11

可能的方法之一.

from datetime import datetime
current_month = datetime.now().month

Order.objects.filter(created_at__month=current_month)
Run Code Online (Sandbox Code Playgroud)

请参阅https://docs.djangoproject.com/en/stable/ref/models/querysets/#month以供参考.

  • 这也将取得去年同月的记录.例如.2016年4月; 2015年4月等等...如果我们只想要OP当月专门针对当月的记录,我们也不应该过年吗? (4认同)

Dan*_*man 5

如果你只是在当月之后,这很容易,因为你不必担心结束日期 - 毕竟之后什么都不能创建.

start_of_month = datetime.date.today().replace(day=1)
orders_this_month = Order.objects.filter(created_at__gte=start_of_month)
Run Code Online (Sandbox Code Playgroud)


vic*_* n. 5

(当前)接受的答案不正确。如评论中所述,OP可能希望获得当年的当前月份。一年中没有当前月份。好吧,大多数人都想要第一。

所以我宁愿做

Order.objects.filter(created_at__gte=timezone.now().replace(day=1, hour=0, minute=0, second=0, microsecond=0))
Run Code Online (Sandbox Code Playgroud)

以上也解决了时区问题。