如何在集合中使用 Get 和 Filter 来获取与特定用户相关的值

How to use Get and Filter in set to get values related to a particular user

我正在尝试获取特定用户下的订单的价值,我的意思是我有一个电子商务应用程序,用户可以在其中进行购买,我成功地获得了在用户想要下订单时显示的订单项,但我想让该用户已经购买的所有订单显示在不同的页面(订单历史记录)中,我正在尝试对序列化程序使用查询集,但尽管进行了多次调整,但它还是不起作用,我已经准备好文档但似乎做对了。请帮忙,

型号:

 user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    ref_code = models.CharField(max_length=20, blank=True, null=True)
    items = models.ManyToManyField(eOrderItem)
    start_date = models.DateTimeField(auto_now_add=True)
    ordered_date = models.DateTimeField(null=True)
    ordered = models.BooleanField(default=False)
   payment = models.ForeignKey(
        'Payment', on_delete=models.SET_NULL, blank=True, null=True)
    coupon = models.ForeignKey(
        'Coupon', on_delete=models.SET_NULL, blank=True, null=True)
    being_delivered = models.BooleanField(default=False)
    received = models.BooleanField(default=False)
    refund_requested = models.BooleanField(default=False)
    refund_granted = models.BooleanField(default=False)
    transaction_id = models.CharField(max_length=200, null=True)
    qr_code = models.ImageField(upload_to='qrcode', blank=True)

这是(订单历史)的序列化器

class TicketSerializer(serializers.ModelSerializer):
    order_items = serializers.SerializerMethodField()


    class Meta:
        model = Order
        fields = '__all__'

    def get_order_items(self, obj):
        return OrderItemSerializer().data

查看:

class TicketDetailView(RetrieveAPIView):
    serializer_class = TicketSerializer
    permission_classes = (IsAuthenticated,)

    def get_object(self):
        try:
            # order = Order.objects.get(user=self.request.user).filter(ordered=True)
            # order = Order.objects.filter(order=True)
            # order = Order.objects.get(user=self.request.user, ordered=True)
            order = Order.objects.filter(ordered=False, user=self.request.user)

            return order
        except ObjectDoesNotExist:
           return Response({"message": "You do not have any ticket"}, status=HTTP_400_BAD_REQUEST)

从视图中,您可以看到我尝试使用查询集尝试了可能的选项,但它不起作用,当我使用 get(user=self.request.user) 时它有效,但是当我通过 Order=True (对于订单历史记录)它说 get() returned more than one Order -- it returned 3! 并且我理解因为我使用 get() (其他选项不起作用)当我通过 Order=False (因为它适用于要购买的订单项目)它有效因为一次只有一个。

请问我该怎么办,我只想获取特定用户订购的所有商品。

您期望得到多个结果,这就是为什么您应该覆盖 get_queryset() 而不是 get_object()(应该用于详细视图):

def get_queryset(self):
    return Order.objects.filter(ordered=False, user=self.request.user)