我正在尝试对我的模型执行分组,如下所示:
class Restaurant(models.Model):
pass
class Order(models.Model):
created = models.DateTimeField(auto_now_add=True)
restaurant = mdoels.ForeignKey('Restaurant')
现在我想知道每天创建了多少个订单。这意味着我需要从DateTime字段中获取日期,然后进行计数。在
如果它是相关的,我将通过以下方式获得Order
queryset:
现在,我怎样才能从orders
得到我想要的?我尝试过类似的方法:
orders.values('created').annotate(Count('created'))
使用TruncDate
等。在
我使用的是python2和django1.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}
。现在最好是按所有日期分组,而不仅仅是这个日期。在
您应该能够执行
orders.filter(created__date=datetime.date(2018, 6, 8)).values('id__count')
,这将为您提供一个字典列表:[{'id__count': 3},{'id__count': 1},...]
。在这是docs
编辑: 尝试注释,然后获取值:
dates_and_counts
将是元组的列表:[(date1,count1),(date2,count2)...]
。dct
将转换为字典。在您可以使用以下方法在一个查询中获取数据:
这将返回一个
^{pr2}$QuerySet
的字典,例如:(添加格式)
在幕后,它将生成一个查询,如:
(其中
123
是一个示例餐厅id)。在例如,您可以迭代结果并构造一个JSON对象,等等
例如,我们可以通过使用dictionary comprehension迭代查询,将
datetime.date
对象映射到counts:注意,没有任何
Order
的日期将不属于查询集(也不属于result
字典,这是合乎逻辑的,因为我们将Order
表作为“根”,如果没有行,则没有输出)相关问题 更多 >
编程相关推荐