繁体   English   中英

如何添加到购物车 drf

[英]How to add to cart drf

我已经问过这个问题,但没有得到答复,请您详细说明我应该如何进行。 我正在尝试创建订单,但我坚持逻辑。

模型.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)

序列化程序.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'
              ]

视图.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)

网址.py:

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

添加到购物车后如何创建订单?

首先我建议你不要使用ModelViewSet,因为你需要的只是为你的视图创建和更新,创建使用CreateAPIView,更新RetrieveAPIView。 您的代码将如下所示:

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 包含更多您不使用的代码。 你也可以从请求中获取用户,你可以添加

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

是的,您可以向 addtocart 端点发出发布请求。 但是必须在 addtocart 端点中编写逻辑来创建订单并将 OrderItem 添加到订单中。 然后必须将订单号返回给浏览器,以便用户可以继续购物/结帐订单。

收到订单号后,您可以执行一些 javascript 操作来向用户显示他的订单详细信息。

暂无
暂无

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

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