• (二十六)拍卖专场相关的接口


    1. 拍卖专场的接口

    url(r'^auction/$', auction.AuctionView.as_view()),

    class AuctionModelView(serializers.ModelSerializer): status = serializers.CharField(source='get_status_display') preview_start_time = serializers.DateTimeField(format="%Y-%m-%d") goods = serializers.SerializerMethodField() class Meta: model = models.Auction # fields = "__all__" fields = ['id', 'title', 'cover', 'status', 'preview_start_time', 'look_count', 'goods_count', 'total_price', 'bid_count', 'goods'] def get_goods(self, obj): queryset = models.AuctionItem.objects.filter(auction=obj)[0:5] return [row.cover for row in queryset] class AuctionView(ListAPIView): """ 拍卖专场接口 """ # queryset = models.Auction.objects.filter(status__gt=1).order_by('id') queryset = models.Auction.objects.filter(status__gt=0).order_by('id') serializer_class = AuctionModelView # 分页接口 # filter_backends = [MinFilterBackend, MaxFilterBackend] # pagination_class = OldBoyLimitPagination

    2. 拍卖专场详细

    先获取专场详细---在里面获取商品信息在写一个序列化循每一个商品的信息
    url(r'^auction/(?P<pk>d+)/$', auction.AuctionDetailView.as_view()),

    class AuctionDetailItemModelSerializer(serializers.ModelSerializer): is_deposit = serializers.SerializerMethodField() class Meta: model = models.AuctionItem fields = ['id', 'cover', 'status', 'reserve_price', 'highest_price', 'is_deposit'] def get_is_deposit(self, obj): user_object = self.context['request'].user if not user_object: return False return models.DepositRecord.objects.filter(user=user_object, item=obj, status=2, deposit_type=1).exists() class AuctionModelDetailView(serializers.ModelSerializer): goods = serializers.SerializerMethodField() # 检查是否缴纳保证金 is_deposit = serializers.SerializerMethodField() model = models.Auction fields = '__all__' def get_goods(self, obj): item_object_list = models.AuctionItem.objects.filter(auction=obj)
          # 每个单品的信息 ser
    = AuctionDetailItemModelSerializer(instance=item_object_list, many=True, context=self.context) return ser.data def get_is_deposit(self, obj): """ 检查是否已缴纳全场保证金 """ # 1. 没登陆,显示去缴纳保证金 user_object = self.context['request'].user if not user_object: return False # 2. 去查看缴纳保证金记录的表中是否有此用户&此专场 return models.DepositRecord.objects.filter(user=user_object, auction=obj, status=2, item__isnull=True).exists() class AuctionDetailView(RetrieveAPIView): """ 拍卖列表详细页面 专场详细 """ queryset = models.Auction.objects.filter(status__gt=1) serializer_class = AuctionModelDetailView

    3. 整合 拍卖专场和拍卖详细

        # '''继承GenericViewSet要写get对应的是啥'''
        url(r'^auction2/$', auction.Auction2View.as_view({'get':'list'})),
        url(r'^auction2/(?P<pk>d+)/$', auction.Auction2View.as_view({'get':'retrieve'})),
    
    
    
    class Auction2View(ListModelMixin, RetrieveModelMixin, GenericViewSet):
        queryset = models.Auction.objects.filter(status__gt=1).order_by('-id')
        serializer_class = AuctionModelSerializerView
        filter_backends = [MinFilterBackend, MaxFilterBackend, ]
        pagination_class = OldBoyLimitPagination
    
        def get_serializer_class(self):
            pk = self.kwargs.get('pk')
            if pk:
                return AuctionModelDetailView
            return AuctionModelSerializerView

    ↓ 对应的序列化
    # ##############拍卖专场接口###################################
    class AuctionModelSerializerView(serializers.ModelSerializer):
        status = serializers.CharField(source='get_status_display')
        preview_start_time = serializers.DateTimeField(format="%Y-%m-%d")
    
        goods = serializers.SerializerMethodField()
    
        class Meta:
            model = models.Auction
            # fields = "__all__"
            fields = ['id', 'title', 'cover', 'status', 'preview_start_time',
                      'look_count', 'goods_count', 'total_price', 'bid_count', 'goods']
    
        def get_goods(self, obj):
            queryset = models.AuctionItem.objects.filter(auction=obj)[0:5]
            return [row.cover for row in queryset]
    
    # #######拍卖列表详细页面 专场详细##########################################
    
    class AuctionDetailItemModelSerializer(serializers.ModelSerializer):
        is_deposit = serializers.SerializerMethodField()
    
        class Meta:
            model = models.AuctionItem
            fields = ['id', 'cover', 'status', 'reserve_price', 'highest_price', 'is_deposit']
    
        def get_is_deposit(self, obj):
            user_object = self.context['request'].user
            if not user_object:
                return False
            return models.DepositRecord.objects.filter(user=user_object, item=obj, status=2, deposit_type=1).exists()
    
    
    class AuctionModelDetailView(serializers.ModelSerializer):
        goods = serializers.SerializerMethodField()
        # 检查是否缴纳保证金
        is_deposit = serializers.SerializerMethodField()
    
        model = models.Auction
        fields = '__all__'
    
        def get_goods(self, obj):
            # 每个单品信息
            item_object_list = models.AuctionItem.objects.filter(auction=obj)
            ser = AuctionDetailItemModelSerializer(instance=item_object_list, many=True, context=self.context)
            return ser.data
    
        def get_is_deposit(self, obj):
            """ 检查是否已缴纳全场保证金 """
            # 1. 没登陆,显示去缴纳保证金
            user_object = self.context['request'].user
            if not user_object:
                return False
            # 2. 去查看缴纳保证金记录的表中是否有此用户&此专场
            return models.DepositRecord.objects.filter(user=user_object, auction=obj, status=2, item__isnull=True).exists()

     4. 单品详细

        # 单品详细
        url(r'^auction/item/(?P<pk>d+)/$', auction.AuctionItemDetailView.as_view()),
    
    
    class AuctionItemDetailModelSerializer(serializers.ModelSerializer):
        """
        轮播图,图片,规格,浏览记录
        """
        carousel_list = serializers.SerializerMethodField()
        detail_list = serializers.SerializerMethodField()
        image_list = serializers.SerializerMethodField()
        record = serializers.SerializerMethodField()
    
        class Meta:
            model = models.AuctionItem
            fields = "__all__"
    
        def get_carousel_list(self, obj):
            queryset = models.AuctionItemImage.objects.filter(item=obj, carousel=True).order_by('-order')
            return [row.img for row in queryset]
    
        def get_image_list(self, obj):
            queryset = models.AuctionItemImage.objects.filter(item=obj).order_by('-order')
            return [row.img for row in queryset]
    
        def get_detail_list(self, obj):
            queryset = models.AuctionItemDetail.objects.filter(item=obj)
            return [model_to_dict(row, ['key', 'value']) for row in queryset]
    
        def get_record(self, obj):
            queryset = models.BrowseRecord.objects.filter(item=obj)
            result = {
                'record_list': [row.user.avatar for row in queryset[0:10]],
                'total_count': queryset.count()
            }
            return result
    
    
    # 单品详细
    class AuctionItemDetailView(RetrieveAPIView):
        queryset = models.AuctionItem.objects.filter(status__gt=1)
        serializer_class = AuctionItemDetailModelSerializer
  • 相关阅读:
    IT学习 程序员 学习网址收藏
    PHP地图上的点文字标注
    php 三种文件下载的实现
    10个免费的jQuery富文本编辑器
    Docker Swarm(四)Volume 数据(挂载)持久化
    Docker Swarm(三)Service(服务)分配策略
    Docker Swarm(二)常用命令
    Docker Swarm(一)集群部署
    Linux——Shell脚本参数传递的2种方法
    Linux——系统时间、开机时间
  • 原文地址:https://www.cnblogs.com/a438842265/p/12512694.html
Copyright © 2020-2023  润新知