django-restful:訂單功能 學(xué)習(xí)記錄

訂單同樣 可以修改 創(chuàng)建 刪除 查看這些功能

views

class OrderViewset(viewsets.GenericViewSet, mixins.ListModelMixin,
                   mixins.CreateModelMixin, mixins.RetrieveModelMixin,
                   mixins.DestroyModelMixin):
    """
    訂單管理
    list:
        獲取個人訂單
    create:
        創(chuàng)建訂單
    delete:
        刪除訂單
    """
    permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
    authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
    # serializer_class = OrderSerializer

    def get_serializer_class(self): #動態(tài)獲取serializer
        if self.action == 'retrieve':
            return OrderDetailSerializer
        return OrderSerializer

    def get_queryset(self):  
        # 獲取屬于用戶的購物車list
        return OrderInfo.objects.filter(user=self.request.user)

    def perform_create(self, serializer):  #表單創(chuàng)建
        order = serializer.save()   #創(chuàng)建了 訂單
        shop_carts = ShoppingCart.objects.filter(user=self.request.user)  #找到用戶購物車
        for shop_cart in shop_carts:  #然后遍歷
            order_goods = OrderGoods()
            order_goods.goods = shop_cart.goods
            order_goods.goods_num = shop_cart.nums
            order_goods.order = order
            order_goods.save()  #創(chuàng)建訂單物品詳情

            shop_cart.delete() #然后刪除
        return order

serializer

class OrderGoodsSerializer(serializers.ModelSerializer):  #商品詳情
    goods = GoodsSerializer(many=False)  #一對一的商品
    class Meta:
        model= OrderGoods
        fields = '__all__'

class OrderDetailSerializer(serializers.ModelSerializer):#訂單詳情  #訂單list用
    goods = OrderGoodsSerializer(many=True) #一個訂單多個商品
    class Meta:
        model= OrderInfo
        fields = '__all__'

class OrderSerializer(serializers.ModelSerializer):  #訂單  創(chuàng)建訂單用
    user = serializers.HiddenField(
        default=serializers.CurrentUserDefault()
    )
    pay_status = serializers.CharField(read_only=True)  #這些設(shè)置為read_only 不用設(shè)置  由后端生成
    order_sn = serializers.CharField(read_only=True)
    trade_no = serializers.CharField(read_only=True)
    pay_time = serializers.DateTimeField(read_only=True)
    add_time = serializers.DateTimeField(read_only=True)
    def generate_order_sn(self):   #訂單號
        # 當(dāng)前時間+userid+隨機數(shù)
        from random import Random
        random_ins = Random()
        order_sn = "{time_str}{userid}{ranstr}".format(time_str=time.strftime("%Y%m%d%H%M%S"),
                                                       userid=self.context['request'].user.id,
                                                       ranstr=random_ins.randint(10, 99))
        return order_sn

    def validate(self, attrs):   #添加訂單號
        attrs['order_sn'] = self.generate_order_sn()
        return attrs

    class Meta:
        model = OrderInfo
        fields = "__all__"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容