python - 通过日期范围过滤在 django rest 框架中不起作用
问题描述
我正在尝试计算上周客户的订单总数。我在视图中使用了ordered_date__range,但我的API 显示计数为零。我不确定这里有什么问题,因为我知道我的数据库中有订单。
我的观点:
class DashboardView(ListAPIView):
permission_classes = [AllowAny]
def get(self, request, *args, **kwargs):
count_1 = Order.objects.filter(order_items__item__merchant=self.kwargs['pk']).count()
......................
startdate = datetime.today() + timedelta(days=1)
enddate = startdate - timedelta(days=30)
count_8 = Order.objects.filter(order_items__item__merchant=self.kwargs['pk'],ordered_date__range=[startdate, enddate]).count()
return Response(
{'active_users_now': count_2,
'total_customers': count_9,
'total_orders': count_1,
'total_categories': count_3,
'total_subcategories' : count_6,
'total_products_available': count_4,
'total_prodcuts_sold': count_5,
'total_earnings': count_7,
'total_orders_of_the_week': count_8,
},
status=status.HTTP_200_OK)
在这里,如果我调用上面的 api,我的计数显示为零。我刚刚尝试添加 2 或 3 个订单,但仍然得到零计数。
我也尝试删除这部分order_items__item__merchant=self.kwargs['pk'],
,但结果相同为零。CCount_1 完全正常工作。
我只是想捕捉上周特定商家的客户的订单。
我的模型:
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
#order_items = models.ManyToManyField('OrderItem',blank=True, null=True)
order_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship')
ordered_date = models.DateTimeField(auto_now_add=True)
解决方案
您的日期范围看起来有误,因为您enddate
之前是startdate
:
startdate = datetime.today() + timedelta(days=1)
enddate = startdate - timedelta(days=30)
此外,您正在谈论a week
并且您计算出 30 天。
我想应该是:
startdate = datetime.today() - timedelta(days=8)
enddate = startdate + timedelta(days=7)
推荐阅读
- db2 - DB2 ADO.NET 连接器仅安装 32 位连接器
- python - 创建表时出现Python sqlalchemy错误
- sql - 使用一条 SQL 命令将数据添加到多对多关系
- wordpress - 如何在特定的 DIV 中显示 HOVERED wordpress 帖子的特色图片?
- javascript - 客户端的 Html 缩小器
- sql - 如何计算以年和月为单位的时间段
- angular - 使用 Cypress 触发 Angular Ivy 变化检测
- javascript - NodeJS:如何重定向到外部 URL?
- java - JPA/Hibernate - 对象不保存到数据库
- hyperledger-fabric - Hyperledger Fabric:尝试加入对等通道时出现“错误:错误的建议响应 500:访问被拒绝”