简体   繁体   English

如何添加到购物车 drf

[英]How to add to cart drf

I have already asked this question but I got no response can you please elaborate how should I proceed.我已经问过这个问题,但没有得到答复,请您详细说明我应该如何进行。 I am trying to create the order but i stuck at logic.我正在尝试创建订单,但我坚持逻辑。

models.py:模型.py:

class OrderItem(models.Model):
      image_number = models.CharField(max_length=20)
      title = models.CharField(max_length=20)
      image_size = models.CharField(max_length=50)
      file_type = models.CharField(max_length=20)
      price = models.CharField(max_length=50)

      def __str__(self):
          return self.title


class Order(models.Model):
      user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
      items = models.ManyToManyField(OrderItem)
      start_date = models.DateTimeField(auto_now_add=True)
      ordered_date = models.DateTimeField()
      ordered = models.BooleanField(default=False)

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

serializers.py:序列化程序.py:

class AddtocartSerializers(serializers.ModelSerializer):
      class Meta:
            model = OrderItem
            fields = ['image_number','title','image_size','file_type','price']



class CartSerializers(serializers.ModelSerializer):   
      class Meta:
           model = Order
           fields = ['item',
                     'start_date',
                     'ordered_date'
              ]

views.py:视图.py:

class AddtocartView(generics.CreateAPIView):
      authentication_classes = []
      permission_classes = []
      pagination_class = None
      queryset=OrderItem.objects.all()
      serializer_class = AddtocartSerializers


class CartView(generics.ListCreateAPIView):
      authentication_classes = []
      permission_classes = []
      pagination_class = None
      queryset=Order.objects.all()
      serializer_class = CartSerializers

      def create(self, request):        
          return super(AddtocartView, self).create(request, *args, **kwargs)

urls.py:网址.py:

path('addtocart/',views.AddtocartView.as_view(),name='addtocart'),
path('cart/',views.CartView.as_view(),name='cart'),

how can i create order after addtocart?添加到购物车后如何创建订单?

First of my suggestion for you don't to use ModelViewSet, because all you need is create and update for you view, for create use CreateAPIView, for update RetrieveAPIView.首先我建议你不要使用ModelViewSet,因为你需要的只是为你的视图创建和更新,创建使用CreateAPIView,更新RetrieveAPIView。 you code will be like below:您的代码将如下所示:

class OrderItemSerializer(serializers.ModelSerializer)
    class Meta:
        model = OrderItem
        fields = ['id', 'image_number', 'image_size', 'file_type', 'price']

class OrderCreateSerializer(serializers.ModelSerializer)
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
    items = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=OrderItem.objects.all(), required=True), required=True)
    ordered_date = serializers.DateField()

    class Meta:
        model = Order
        fields = ['user', 'items', 'ordered_date']

    def create(self, validated_data):
        validated_data['user'] = self.context['request'].user 
        instance = Order.objects.create(**validated_data)
        instance.save()
        return instance


class CartView(CreateAPIView):
      authentication_classes = []
      queryset=Order.objects.all()
      serializer_class = OrderCreateSerializer

      def create(self, request):
          return super(AddtocartView, self).create(request, *args, **kwargs)

ModelViewSet include more code which you don't use in you case. ModelViewSet 包含更多您不使用的代码。 And also you can get user from request, and you can just add你也可以从请求中获取用户,你可以添加

validated_data['user'] = self.context['request'].user

Yes you can do a post request to addtocart endpoint.是的,您可以向 addtocart 端点发出发布请求。 But there must be logic written in addtocart endpoint to create an order and add OrderItem to the order.但是必须在 addtocart 端点中编写逻辑来创建订单并将 OrderItem 添加到订单中。 Then the order number must be returned to browser so that user can resume shopping / checkout the order.然后必须将订单号返回给浏览器,以便用户可以继续购物/结帐订单。

After receiving the order number you can do some javascript stuff to show user his order details.收到订单号后,您可以执行一些 javascript 操作来向用户显示他的订单详细信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM