【问题标题】:Count the number of customers in view in Django rest Framework在 Django rest Framework 中计算视图中的客户数量
【发布时间】:2021-05-23 08:58:44
【问题描述】:

我有一个多供应商电子商务网站,我必须在卖家仪表板中计算购买了该商家产品的客户数量。我已经尝试过,但它不正确。

我在我的观点中写了我的逻辑如下:

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)

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

Seller 和 Customer 与我的 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 来查看所有购买了该特定卖家产品的客户的详细信息。但是,如果我们可以写我的第一个问题,我们也可以写这个。

【问题讨论】:

    标签: python django api join django-rest-framework


    【解决方案1】:

    我猜,它不起作用的原因之一 - 您过滤的是 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()
    

    【讨论】:

    • 我之前使用过 Merchant=self.kwargs['pk'] 并且可以正常工作。顺便说一句,你能告诉我 values_list 给出了什么吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多