我正在尝试使用 api
创建购物车 django rest framework
。我创建了我的视图和序列化程序和 urls 。但是当我想用邮递员测试我的 api
时,我遇到了这个错误:
Field 'id' expected a number but got <django.contrib.auth.models.AnonymousUser object at 0x053A7E68>.
我想将产品添加到我的购物车。我的认证系统是令牌认证。我将在请求的标头中传递令牌,但仍然出现该错误。
我将在这里分享我的代码:
class OrderItemSerializer(serializers.ModelSerializer):
product = serializers.SerializerMethodField()
final_price = serializers.SerializerMethodField()
class Meta:
model = OrderItem
fields = (
'id',
'product',
'quantity',
'final_price'
)
def get_product(self, obj):
return ProductSerializer(obj.item).data
def get_final_price(self, obj):
return obj.get_final_price()
class OrderSerializer(serializers.ModelSerializer):
order_items = serializers.SerializerMethodField()
total = serializers.SerializerMethodField()
class Meta:
model = Order
fields = (
'id',
'order_items',
'total',
'coupon'
)
def get_order_items(self, obj):
return OrderItemSerializer(obj.products.all(), many=True).data
def get_total(self, obj):
return obj.get_total()
#views:
class AddToCartView(APIView):
def post(self, request, *args, **kwargs):
slug = request.data.get('slug', None)
if slug is None:
return Response({"message": "Invalid request"}, status=HTTP_400_BAD_REQUEST)
product = get_object_or_404(Product, slug=slug)
order_item, created = OrderItem.objects.get_or_create(
product=product,
user=request.user,
ordered=False
)
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
# check if the order item is in the order
if order.products.filter(product__slug=product.slug).exists():
order_item.quantity += 1
order_item.save()
return Response(status=HTTP_200_OK)
else:
order.products.add(order_item)
return Response(status=HTTP_200_OK)
else:
ordered_date = timezone.now()
order = Order.objects.create(
user=request.user, ordered_date=ordered_date)
order.products.add(order_item)
return Response(status=HTTP_200_OK)
#urls:
path('add_to_cart/', AddToCartView.as_view(), name='add_to_cart'),
这是我的邮递员:
我传递了主体中的 slug 和授权中的令牌。
休息框架:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
# 'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
'SEARCH_PARAM': 'q'
}
REST_AUTH_SERIALIZERS = {
'LOGIN_SERIALIZER': 'Accounts.serializers.LoginUserSerializer',
}