【发布时间】:2018-11-18 16:35:06
【问题描述】:
我正在尝试对我的模型进行分组,如下所示:
class Restaurant(models.Model):
pass
class Order(models.Model):
created = models.DateTimeField(auto_now_add=True)
restaurant = models.ForeignKey('Restaurant')
现在我想知道每天创建了多少订单。这意味着我需要从 DateTime 字段中获取日期,然后进行计数。
如果相关,我会以这种方式获取Order 查询集:
restaurant = Restaurant.objects.get(id=request.data['restaurant_id'])
orders = restaurant.order_set.filter(created__lte=some_date)
现在,我怎样才能从orders 获得我想要的东西?我试过这样的事情:
orders.values('created').annotate(Count('created'))
使用TruncDate等。
我正在使用 Python 2 和 Django 1.11。
编辑为了更好地表达我的意图。我想要一些我可以在纯 python 中实现的东西,如下所示:
orders_by_date = {}
for order in orders:
if orders_by_date.get(datetime.date(orders[0].created.year, orders[0].created.month, orders[0].created.day):
orders_by_date[datetime.date(orders[0].created.year, orders[0].created.month, orders[0].created.day)] += 1
else:
orders_by_date[datetime.date(orders[0].created.year, orders[0].created.month, orders[0].created.day)] = 1
EDIT2我能够成功显示单个日期的计数:
orders.filter(created__date=datetime.date(2018, 6, 8)).aggregate(Count('id'))
给我{'id__count': 3}。现在可以完美地按所有日期进行分组,而不仅仅是单个日期。
【问题讨论】:
-
当你说按所有日期分组时,你的意思是每个日期都得到
id__count? -
或多或少是的。准确地说:如果我在 2018 年 1 月 12 日 12:00 创建了 1 个订单,在 2018 年 1 月 13 日创建了第二个订单,在 2018 年 2 月 12 日创建了第三个订单,我希望输出类似于 @ 987654331@。如果是
{'id__count': 2, 'created_date': date(2018, 1, 1), (...),我可以接受。 -
好的,我已经编辑了我的答案。