在Django REST框架中统计视图中的客户数量

yr9zkbsy  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(127)

我有一个多供应商的电子商务网站,其中卖方 Jmeter 板,我必须计算已购买该商家产品的客户数量.我试过了,但不正确。
我把我的逻辑写在我的观点中,如下所示:

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()
        count_2 = Token.objects.filter(user__is_customer=True).count()
        
# Having problem in this count_9
        
        count_9 = Order.objects.annotate(abc=Count('user')).filter(order_items__item__merchant=self.kwargs['pk']).count()
        
        return Response(
            {'active_users_now': count_2,
             'total_customers': count_9,
                'total_orders': count_1,             
             },
            status=status.HTTP_200_OK)

我的模特:

class Order(models.Model):
    ...............
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)

class OrderItem(models.Model):  
    ...................#other fields

    order = models.ForeignKey(Order,on_delete=models.CASCADE, blank=True,null=True,related_name='order_items')
    item = models.ForeignKey(Product, on_delete=models.CASCADE,blank=True, null=True)

Class Product(models.Model):
   ............
   merchant = models.ForeignKey(Seller,on_delete=models.CASCADE,blank=True,null=True)

我有两个用户模型,分别是客户和卖家。我实际上需要找出购买某个卖家产品的客户数量。

卖家和客户是一对一的,与我的CustomUser模型相关:

class Seller(models.Model):
    ................
    seller = models.OneToOneField(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)

class Customer(models.Model):
    ...............
    customer = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)

我只需要编写正确的SQL连接来确定计数。

第二个问题是:

我需要写一个API来查看所有购买了该特定卖家产品的客户的详细信息。但是,如果我们可以写我的第一个问题,我们也可以写这个。

v1l68za4

v1l68za41#

我猜,它不起作用的原因之一是你过滤的是merchant=self.kwargs['pk']而不是merchant_id=self.kwargs['pk']
一种可能的解决办法是:

count_9 = Order.objects.filter(
    order_items__item__merchant_id=self.kwargs['pk']
).values_list('user', flat=True).count()

相关问题