Example #1
0
class HomeBannerSerializers(serializers.HyperlinkedModelSerializer):
    image = obj(allow_null=True,
                label='类别图',
                queryset=File.objects.all(),
                required=False,
                view_name='file-detail',
                serializer_class=FileSerializer)
    category = obj(allow_null=True,
                   label='跳转分类',
                   queryset=GoodsCategory.objects.all(),
                   required=False,
                   view_name='goodscategory-detail',
                   serializer_class=GoodsCategorySerializer)
    goods_info = serializers.SerializerMethodField()

    class Meta:
        model = HomeBanner
        fields = generate_fields(HomeBanner,
                                 add=['goods_info'],
                                 remove=['add_time'])

    def get_goods_info(self, instance):
        if instance.goods:
            return {"goods_name": instance.goods.name}
        return None
Example #2
0
class GoodsTypeSimplifiedSerializer(serializers.HyperlinkedModelSerializer):
    icon = obj(allow_null=True,
               label='封面图',
               queryset=File.objects.all(),
               required=False,
               view_name='file-detail',
               serializer_class=FileSerializer)
    ladder_list = serializers.ListField(label='阶梯',
                                        child=LadderField(),
                                        allow_null=True,
                                        required=False)

    class Meta:
        model = GoodType
        fields = ["id", "market_price", "price", "is_sell", "ladder_list"]

    def validate(self, attrs):
        if attrs.get('ladder_list'):
            attrs['ladder'] = json.dumps(attrs['ladder_list'],
                                         use_decimal=True)
        attrs.pop('ladder_list')
        return attrs

    def to_representation(self, instance):
        ret = super().to_representation(instance)
        if instance.ladder:
            ret['ladder_list'] = json.loads(instance.ladder, use_decimal=True)
        else:
            ret['ladder_list'] = None
        return ret
Example #3
0
class GoodsListNewSerializer(serializers.HyperlinkedModelSerializer):
    ord_goods = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        allow_null=True,
        label='普通商品',
        queryset=OrdGoods.objects.all(),
        view_name='ordgoods-detail',
        serializer_class=OrdGoodsSimplifiedSerializer,
        is_save=True)
    repl_goods = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        allow_null=True,
        label='积分商品',
        queryset=ReplGoods.objects.all(),
        view_name='replgoods-detail',
        serializer_class=ReplGoodsSerializer,
        is_save=True)
    groupbuy_info = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        allow_null=True,
        label='拼团信息',
        queryset=GroupBuyInfo.objects.all(),
        view_name='groupbuyinfo-detail',
        serializer_class=GroupBuyInfoSeriazlizers,
        is_save=True)
    category = obj(allow_null=True,
                   label='商品分类',
                   queryset=GoodsCategory.objects.all(),
                   required=False,
                   view_name='goodscategory-detail',
                   serializer_class=GoodsCategorySimplifiedSerializer)

    banner = serializers.SerializerMethodField()

    def get_banner(self, instance):
        banner = instance.banner.first()
        if banner:
            return [
                ImagesSerializer(instance=banner, context=self.context).data
            ]
        return None

    class Meta:
        model = Goods
        fields = generate_fields(Goods,
                                 add=[],
                                 remove=[
                                     'image', 'video', 'poster', 'is_template',
                                     'delivery_method', 'shop', 'attach',
                                     'detail'
                                 ])

    def to_representation(self, instance):
        res = super().to_representation(instance)
        res['status'] = Goods.status_dict.get(res['status'])
        return res
Example #4
0
class ShortcutSerializers(serializers.HyperlinkedModelSerializer):
    image = obj(allow_null=True,
                label='类别图',
                queryset=File.objects.all(),
                required=False,
                view_name='file-detail',
                serializer_class=FileSerializer)
    category = obj(allow_null=True,
                   label='跳转分类',
                   queryset=GoodsCategory.objects.all(),
                   required=False,
                   view_name='goodscategory-detail',
                   serializer_class=GoodsCategorySerializer)

    class Meta:
        model = Shortcut
        fields = generate_fields(Shortcut, remove=['add_time'])
Example #5
0
class BannerSerializer(serializers.HyperlinkedModelSerializer):
    image = obj(allow_null=True,
                label='封面图',
                queryset=File.objects.all(),
                required=False,
                view_name='file-detail',
                serializer_class=FileSerializer)
    goods = obj(allow_null=True,
                label='商品',
                queryset=Goods.objects.all(),
                required=False,
                view_name='goods-detail',
                serializer_class=GoodsSerializer)

    class Meta:
        model = Banner
        fields = generate_fields(Banner, add=[])
Example #6
0
class StoreLogoSerializers(serializers.Serializer):

    square_logo = obj(allow_null=True, label='正方形logo', queryset=File.objects.all(), required=False,
                 view_name='file-detail', serializer_class=FileSerializer)
    rectangle_logo = obj(allow_null=True, label='长方形logo', queryset=File.objects.all(), required=False,
                 view_name='file-detail', serializer_class=FileSerializer)

    def save(self, **kwargs):
        square_logo = self.validated_data.get('square_logo')
        rectangle_logo = self.validated_data.get('rectangle_logo')
        StoreLogo.objects.update_or_create(label='square_logo', defaults={'image': square_logo})
        StoreLogo.objects.update_or_create(label='rectangle_logo', defaults={'image': rectangle_logo})

        return {
            'square_logo': FileSerializer(instance=square_logo, context=self.context).data,
            'rectangle_logo': FileSerializer(instance=rectangle_logo, context=self.context).data,
        }
Example #7
0
class ImagesSerializer(serializers.HyperlinkedModelSerializer):
    image = obj(allow_null=True,
                label='图片',
                queryset=File.objects.all(),
                required=False,
                view_name='file-detail',
                serializer_class=FileSerializer)

    class Meta:
        model = Images
        fields = generate_fields(Images, add=[])
Example #8
0
class StorePosterSerializers(serializers.Serializer):

    store_poster = obj(allow_null=True, label='分享海报', queryset=File.objects.all(), required=False,
                 view_name='file-detail', serializer_class=FileSerializer)

    def save(self, **kwargs):
        store_poster = self.validated_data.get('store_poster')

        StoreLogo.objects.update_or_create(label='store_poster', defaults={'image': store_poster})

        return {
            'store_poster': FileSerializer(instance=store_poster, context=self.context).data.get('file'),
        }
Example #9
0
class ReplGoodsTypeSerializer(serializers.HyperlinkedModelSerializer):
    icon = obj(allow_null=True,
               label='封面图',
               queryset=File.objects.all(),
               required=False,
               view_name='file-detail',
               serializer_class=FileSerializer)

    class Meta:
        model = ReplGoodsType
        fields = generate_fields(ReplGoodsType,
                                 remove=[
                                     'original_limit',
                                     'change_limit',
                                 ])
Example #10
0
class GoodsSerializer(serializers.HyperlinkedModelSerializer):
    banner = ObjectHyperlinkedRelatedField(allow_empty=False,
                                           label='详情页轮播图',
                                           required=False,
                                           allow_null=True,
                                           many=True,
                                           queryset=Images.objects.all(),
                                           view_name='images-detail',
                                           serializer_class=ImagesSerializer,
                                           is_save=True)
    detail = ObjectHyperlinkedRelatedField(allow_empty=False,
                                           label='商品详情图',
                                           many=True,
                                           allow_null=True,
                                           required=False,
                                           queryset=Images.objects.all(),
                                           view_name='images-detail',
                                           serializer_class=ImagesSerializer,
                                           is_save=True)

    ord_goods = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        allow_null=True,
        label='普通商品',
        queryset=OrdGoods.objects.all(),
        view_name='ordgoods-detail',
        serializer_class=OrdGoodsSerializer,
        is_save=True)

    repl_goods = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        allow_null=True,
        label='积分商品',
        queryset=ReplGoods.objects.all(),
        view_name='replgoods-detail',
        serializer_class=ReplGoodsSerializer,
        is_save=True)

    groupbuy_info = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        allow_null=True,
        label='拼团信息',
        queryset=GroupBuyInfo.objects.all(),
        view_name='groupbuyinfo-detail',
        serializer_class=GroupBuyInfoSeriazlizers,
        is_save=True)

    image = obj(allow_null=True,
                label='封面图',
                queryset=File.objects.all(),
                required=False,
                view_name='file-detail',
                serializer_class=FileSerializer)
    video = obj(allow_null=True,
                label='视频介绍',
                queryset=File.objects.all(),
                required=False,
                view_name='file-detail',
                serializer_class=FileSerializer)

    poster = obj(allow_null=True,
                 label='海报图',
                 queryset=File.objects.all(),
                 required=False,
                 view_name='file-detail',
                 serializer_class=FileSerializer)

    category = obj(allow_null=True,
                   label='商品分类',
                   queryset=GoodsCategory.objects.all(),
                   required=False,
                   view_name='goodscategory-detail',
                   serializer_class=GoodsCategorySerializer)

    shop = obj(allow_null=True,
               label='所属商店',
               queryset=Shop.objects.all(),
               required=False,
               view_name='shop-detail',
               serializer_class=ShopSerializer)
    create_poster = serializers.SerializerMethodField()

    attach = ObjectHyperlinkedRelatedField(label='自定义信息',
                                           many=True,
                                           allow_null=True,
                                           required=False,
                                           queryset=Attach.objects.all(),
                                           view_name='attach-detail',
                                           serializer_class=AttachSerializer,
                                           is_save=True)
    status = serializers.ChoiceField(label='商品状态',
                                     required=True,
                                     allow_null=False,
                                     choices=(('is_sell', '在售'), ('preview',
                                                                  '预览'),
                                              ('not_enough',
                                               '库存不足'), ('not_sell', '下架')))

    delivery_method = serializers.ListField(allow_empty=True,
                                            child=serializers.ChoiceField(
                                                choices=Goods.METHOD,
                                                label='Delivery method'),
                                            label='配送方式',
                                            required=False)

    class Meta:
        model = Goods
        fields = generate_fields(Goods, add=['create_poster'])

    def validate(self, attrs):
        if attrs.get('groupbuy') and not attrs.get('groupbuy_info'):
            raise serializers.ValidationError('请为拼团商品设置拼团信息')
        if not attrs.get('fictitious',
                         False) and not attrs.get('delivery_method'):
            raise serializers.ValidationError('请选择配送方式')
        return attrs

    def validate_delivery_method(self, value):
        if 'own' in value and 'express' in value:
            raise serializers.ValidationError('配送方式不能同时设置快递和自配送')
        return value

    def validate_status(self, value):
        status = None
        for k, v in Goods.status_dict.items():
            if v == value:
                status = k
                break
        if status == None:
            raise serializers.ValidationError('商品状态错误')
        return status

    def get_create_poster(self, instance):
        return reverse('goods-poster', (instance.id, ),
                       request=self.context.get('request'))

    def to_representation(self, instance):
        res = super().to_representation(instance)
        res['status'] = Goods.status_dict.get(res['status'])
        return res