Example #1
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 #2
0
class OrdGoodsSerializer(serializers.HyperlinkedModelSerializer):
    gtypes = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        label='商品规格',
        many=True,
        queryset=GoodType.objects.all(),
        view_name='goodtype-detail',
        serializer_class=GoodsTypeSerializer,
        is_save=True)

    class Meta:
        model = OrdGoods
        fields = generate_fields(OrdGoods,
                                 add=[
                                     'estimate_time', 'price_range',
                                     'market_price_range', 'max_rebate'
                                 ])
        extra_kwargs = {
            'price_range': {
                'read_only': True
            },
            'market_price_range': {
                'read_only': True
            },
            'max_rebate': {
                'read_only': True
            },
        }
Example #3
0
class OrdGoodsSimplifiedSerializer(serializers.HyperlinkedModelSerializer):
    gtypes = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        label='商品规格',
        many=True,
        queryset=GoodType.objects.all(),
        view_name='goodtype-detail',
        serializer_class=GoodsTypeSimplifiedSerializer,
        is_save=True)

    class Meta:
        model = OrdGoods
        fields = ["id", "gtypes"]
Example #4
0
class ReplGoodsSerializer(serializers.HyperlinkedModelSerializer):
    gtypes = ObjectHyperlinkedRelatedField(
        allow_empty=False,
        required=False,
        label='积分商品规格',
        many=True,
        queryset=ReplGoodsType.objects.all(),
        view_name='replgoodstype-detail',
        serializer_class=ReplGoodsTypeSerializer,
        is_save=True)

    class Meta:
        model = ReplGoods
        fields = generate_fields(ReplGoods, add=['price_range'])
        extra_kwargs = {
            'price_range': {
                'read_only': True
            },
        }
Example #5
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