首页 > 解决方案 > 通过日期范围过滤在 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)

标签: pythondjangoapidjango-rest-frameworkcount

解决方案


您的日期范围看起来有误,因为您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)

推荐阅读