zoukankan      html  css  js  c++  java
  • (二十六)拍卖专场相关的接口

    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
  • 相关阅读:
    流处理 —— Spark Streaming中的Window操作
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.7 为自动检测组件提供作用域
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.5 在组件中定义bean的元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.4 使用过滤器自定义扫描
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.3 自动检测类和注册bean的定义
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.2 元注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.1 @Component和深层的构造型注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10 类路径扫描和被管理的组件
  • 原文地址:https://www.cnblogs.com/a438842265/p/12512694.html
Copyright © 2011-2022 走看看