訂單同樣 可以修改 創(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__"