【发布时间】:2021-11-08 06:40:48
【问题描述】:
我有一个名为Orders 的模型,用于电子商务网络应用程序,我想知道过去一年中每天的订单数量。所以我过滤了订单如下:
product_orders = Order.objects.filter(
ordered=True, variant__product=self, date__range=[(timezone.now() - timedelta(weeks=52)), timezone.now()])
我想从这个时间范围内循环遍历每一天并获取每天的订单数量,结果应该是这样的:
[
{
date: "2021-06-21",
quantity: 6
},
{
date: "2021-06-22",
quantity: 0
}
]
Order 模型上的日期字段称为 createdAt,它的 default=timezone.now 所以我想要一些汇总或注释过去一年每天创建的订单的内容
订单模型
class Order(models.Model):
order_id = models.CharField(max_length=100, blank=True, null=True)
user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="orders")
address = models.ForeignKey(
Address, on_delete=models.SET_NULL, null=True, blank=True)
variant = models.ForeignKey(
"products.Variant", on_delete=models.CASCADE, related_name="orders")
price = models.FloatField(blank=True, null=True)
store = models.ForeignKey(
"stores.Store", on_delete=models.CASCADE, related_name="orders", null=True, blank=True)
# Cart
in_cart = models.BooleanField(default=True)
# Order
order_group = models.ForeignKey(
"OrderGroup", on_delete=models.CASCADE, related_name="orders", null=True, blank=True)
ordered = models.BooleanField(default=False)
ordered_date = models.DateTimeField(blank=True, null=True)
cancelled = models.BooleanField(default=False)
cancelled_date = models.DateTimeField(blank=True, null=True)
# Return
order_return_deadline = models.DateTimeField(blank=True, null=True)
returning = models.BooleanField(default=False)
returning_date = models.DateTimeField(blank=True, null=True)
returned = models.BooleanField(default=False)
returned_date = models.DateTimeField(blank=True, null=True)
failed_return = models.BooleanField(default=False)
# Shipping
shipped = models.BooleanField(default=False)
shipped_date = models.DateTimeField(blank=True, null=True)
merchant_error = models.BooleanField(default=False)
merchant_error_date = models.DateTimeField(blank=True, null=True)
# Delivery
delivered = models.BooleanField(default=False)
delivered_date = models.DateTimeField(blank=True, null=True)
failed_delivery = models.BooleanField(default=False)
failed_delivery_date = models.DateTimeField(blank=True, null=True)
created_at = models.DateTimeField(default=timezone.now)
def __str__(self):
return f"{self.user.last_name}'s Order"
其中数量为Order.objects.filter(...).count()
【问题讨论】:
-
每天这样很容易,但是没有数量的天不会在查询集中,您需要对结果进行后处理才能填写这些项目。
-
你能分享你
Order模型的相关部分吗? -
订单模型上的日期字段称为
createdAt,其中有default=timezone.now,所以我想要一些汇总或注释过去一年每天创建的订单@WillemVanOnsem -
请edit提问。一个订单是否有数量(并因此总结数量)或计算订单数(这两个不相同)
-
统计订单数
标签: django django-models django-rest-framework