【发布时间】:2013-12-04 12:41:02
【问题描述】:
我的模型中有字段:
class Order(BaseModel):
created_at = models.DateTimeField(auto_now_add=True)
我需要计算当月创建的所有订单对象。 在我看来,我该如何做到这一点?
【问题讨论】:
标签: django django-models django-orm
我的模型中有字段:
class Order(BaseModel):
created_at = models.DateTimeField(auto_now_add=True)
我需要计算当月创建的所有订单对象。 在我看来,我该如何做到这一点?
【问题讨论】:
标签: django django-models django-orm
添加.count 操作对我来说效果最好
import datetime
Order.objects.filter(created_at__gte=datetime.datetime.today().replace(day=1, hour=0, minute=0, second=0, microsecond=0)).count()
【讨论】:
objects.objects 是错误的。请务必在 aswers 中使用正确的语法
(当前)接受的答案不正确。如 cmets 所述,也许 OP 想要当年的当前月份。不是任何年份的当前月份。大多数人都想要第一个。
所以我宁愿这样做
Order.objects.filter(created_at__gte=timezone.now().replace(day=1, hour=0, minute=0, second=0, microsecond=0))
以上也解决了时区问题。
【讨论】:
timezone.localdate().replace(day=1) 获取时区感知月份。时区可以在from django.utils import timezone中找到
一种可能的方式。
from datetime import datetime
current_month = datetime.now().month
Order.objects.filter(created_at__month=current_month)
参考https://docs.djangoproject.com/en/stable/ref/models/querysets/#month。
【讨论】:
如果您只是在当月之后,这很容易,因为您不必担心结束日期 - 毕竟现在之后什么都无法创建。
start_of_month = datetime.date.today().replace(day=1)
orders_this_month = Order.objects.filter(created_at__gte=start_of_month)
【讨论】: