我正在尝试对我的模型进行分组,它看起来像这样:
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
编辑2 我成功地显示了单个日期的计数:
orders.filter(created__date=datetime.date(2018, 6, 8)).aggregate(Count('id'))
给了我{'id__count': 3}
。现在最好按所有日期分组,而不仅仅是这一个。
id__count
吗? - 17slim{date(2018, 1, 1): 2, date(2018, 1, 2): 1}
。如果是{'id__count': 2, 'created_date': date(2018, 1, 1), (...)
我也可以接受。 - gonczor