首页 > 解决方案 > 尝试使用经过验证的用户令牌调用 api 时出现值错误

问题描述

我正在尝试在我的应用程序中获取所有客户的最新订单。我以用户身份登录,收到有效令牌,然后尝试使用 api。每次我尝试调用我的 api 时都会收到此错误:“ValueError:无法查询“jake thedogg”:必须是“CustomerDetails”实例。” 我正在尝试从该用户获取所有订单实例。

def customer_get_latest_order(request):
    customer = get_user(request)
    if not customer:
        return JsonResponse({'invalid token'})
    order = OrderSerializer(Order.objects.filter(customer=customer).order_by("-id"),
        many=True,
        context={"request": request}
    ).data
    return JsonResponse({"order": order})

模型:

class OrderDetail(models.Model):
    order = models.ForeignKey(
        Order, related_name='order_details', on_delete=models.CASCADE)
    product_size = models.ForeignKey(ProductSize, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    sub_total = models.FloatField()

        def __str__(self):
            return str(self.id)

序列化器:

class OrderSerializer(serializers.ModelSerializer):
    customer = CustomerOrderSerializer()
    driver = OrderDriverSerializer()
    dispensary = OrderDispensarySerializer()
    order_details = OrderDetailSerializer(many=True)
    status = serializers.ReadOnlyField(source="get_status_display")

    class Meta:
        model = Order
        fields = ("id", "customer", "dispensary", 'delivery_signature', 'order_rated', 'quantity',
                  "driver", "order_details", "total", "status", "address", "created_at")

订购型号:

class Order(models.Model):
    a = 1
    b = 2
    c = 3
    d = 4

    e = 5

    STATUS_CHOICES = (
        (a, "ah"),
        (b, "bb"),
        (c, "cc"),
        (d, "dd"),

        (CANCELED, "Canceled/Refunded")
    )
    address = models.CharField(max_length=500)
    created_at = models.DateTimeField(default=timezone.now)
    customer = models.ForeignKey(CustomerDetails, on_delete=models.CASCADE)
    delivery_signature = models.ImageField(
        upload_to='delivery_selfie/', blank=True, default='')
    delivered_at = models.DateTimeField(default=timezone.now)
    dispensary = models.ForeignKey(Dispensary, on_delete=models.CASCADE)
    driver = models.ForeignKey(
        Driver, blank=True, null=True, on_delete=models.CASCADE)
    picked_at = models.DateTimeField(default=timezone.now)
    order_rated = models.BooleanField(default=False)
    status = models.IntegerField(choices=STATUS_CHOICES)
    total = models.FloatField()

    def __str__(self):

        return str(self.id)

每次我尝试调用 api 时都会收到该错误。

标签: pythondjangoapi

解决方案


推荐阅读