我正在序列化程序中检查产品是否在购物车中,并且我正在使用
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'
我需要同时做这两个工作,但是将商品添加到购物车是个问题。 我该如何解决?预先谢谢你!
答案 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
。