【问题标题】:Django rest framework creating Orders and order itemsDjango rest框架创建订单和订单项
【发布时间】:2020-10-01 13:06:41
【问题描述】:

我想创建一个订单并订购商品。 为此,我只是使用 CreateApiView 在views.py 中创建新的模型对象,但我收到错误提示应该包含“Serializer_class”,但我不需要序列化程序。

//views.py

class CreateOrder(CreateAPIView):
        def Post(self,request):
            header_token = request.META.get('HTTP_AUTHORIZATION', None)
            print(header_token)
            access_token = header_token.split(' ')[1]
            status,user  = validate_token(access_token)
            cart=Cart.objects.get(user=user)
            print(cart)
            if cart:
                total=cart.total
                userprofile=UserProfile.objects.get(user=user)
                order,created=Order.objects.get_or_create(billing_profile=userprofile,total=total)
    
            cart_items=CartItem.objects.get(cart=cart)
            print(cart_items)
            for item in cart_items:
                itemid=item.item_id
                qty=item.quantity
                item_instance = Items.objects.get(item_id=item)
                order_item,created = OrderItems.objects.get_or_create(order=order, product=item_instance,quantity=qty)
                order.save()
                order_item.save()
                if created:
                    item.delete()
            return Response (status=rt_status.HTTP_200_OK)
        

我想了解如何使用或不使用序列化程序来实现这一目标

【问题讨论】:

  • 您应该能够通过扩展ApiView 类而不是CreateAPIView 类来解决此问题,您的方法名称也应为post 注意:全部小写。你可以阅读更多关于here

标签: django django-rest-framework django-serializer django-rest-viewsets


【解决方案1】:

您正在覆盖不正确的 post 方法。如果你查看CreateAPIView的源代码,你会看到命名方法如下所示。

class CreateAPIView(mixins.CreateModelMixin, GenericAPIView):
    """
    Concrete view for creating a model instance.
    """
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

注意:方法都是小写的。

这个方法调用self.create,它派生自CreateModelMixin,这个方法需要一个序列化器。

如果您需要一些不需要序列化程序的轻量级工具,我建议您使用APIView

from rest_framework.views import APIView

class CreateOrder(APIView):
    def post(self, request):
        ....

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多