DRF中的KeyError'request'

时间:2019-12-21 16:01:02

标签: django python-3.x django-models django-rest-framework

我正在序列化程序中检查产品是否在购物车中,并且我正在使用

class ProductSerializer(serializers.ModelSerializer):
    in_cart = serializers.SerializerMethodField()

    class Meta:
        model = Product
        fields = ['id', 'in_cart']

    def get_in_cart(self, obj):
        user = self.context['request'].user
        if user.is_authenticated:
            added_to_cart = Cart.objects.filter(user=user, product_id=obj.id).exists()
            return added_to_cart
        else:
            return False

它工作正常,但是由于request我无法将产品添加到购物车

我的购物车模型是这样的

class Cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
    quantity = models.PositiveIntegerField()

    def __str__(self):
        return f'{self.user} cart item'


class ItemsListView(generics.ListAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

当我发布产品ID以添加购物车时,会引发此错误

  

user = self.context ['request']。user KeyError:'request'

我需要同时做这两个工作,但是将商品添加到购物车是个问题。 我该如何解决?预先谢谢你!

1 个答案:

答案 0 :(得分:2)

使用前,您需要pass对上下文的请求。因此,序列化程序的调用应如下所示:

enums

对于ProductSerializer(product, context={'request': request}) 类,您甚至不需要它,因为默认情况下,由于ListAPIView方法的默认实现,它在序列化程序中可用:

get_serializer_context

尽管您可以根据需要覆盖它。另外,请注意def get_serializer_context(self): """ Extra context provided to the serializer class. """ return { 'request': self.request, 'format': self.format_kwarg, 'view': self } 接受可调用对象,该对象应为serializer_class