前端:iview Upload组件上传图片,后端:django rest framework 的serializers.ModelSerializer完成图片保存并入库

10 篇文章 0 订阅
6 篇文章 0 订阅

折腾了很长时间,经过查阅很多文档,最后找到了解决办法,现分享出来,希望可以给大家一点帮助,如果有更好的解决方法,请@我,谢谢。

转载,请标明,尊重原创,从你我他开始。

需求:通过iview-admin2.5的Upload上传组件,上传到后端的DRF的API接口。

问题:通过DRF自带的接口测试和xadmin后台测试,上传均正常。但通过iview过来的图片就无法上传。

解决办法:在serializers里面的def validate(self, validated_data): 对数据进行手动编辑,实现上传图片的保存和入库,但有一个前提条件,models.py的图片模型中的所有字段可以为空,不做效验。 

这个方法很笨,有更好的办法,请@我,不吝赐教,谢谢?


上代码:  form * import * 就不贴出来了

models.py

class UploadImage(models.Model):
    """
    上传图片表
    """
    name = models.CharField(default="", max_length=30, null=True, blank=True, verbose_name="图片名称", help_text="图片名称")
    code = models.CharField(default="", max_length=30, null=True, blank=True, verbose_name="图片编码", help_text="图片编码")
    image = models.ImageField(upload_to='static/images/%Y/%m/%d', null=True, blank=True, verbose_name="图片",
                              help_text="图片")

    class Meta:
        verbose_name = '图片列表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return "{0} {1}".format(self.name, self.code)

views.py

class UploadImageViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet):
    """
    上传图片列表
    """
    queryset = UploadImage.objects.all()
    serializer_class = UploadImageSerializer
    parser_classes = (MultiPartParser, FormParser,)

serializers.py

class UploadImageSerializer(serializers.ModelSerializer):
    # 获取当前的登录用户
    creator = serializers.HiddenField(
        default=serializers.CurrentUserDefault(), write_only=True
    )

    # image = serializers.ImageField(max_length=None, use_url=True, label="图片", help_text="图片" )

    class Meta:
        model = UploadImage
        fields = ('id', 'name', 'image', 'creator')

    def validate(self, validated_data):
        # 通过iview Upload上传图片是,图片在FormData里面,DRF无法获取"UploadImage"的对应字段,需要在validate里面手动添加
        # 当validated_data里面没有image时,即为iview Upload组件上传,需要手动编辑一下validated_data。
        # xadmin和 DRF自带接口测试使用的FORM multipart/form-data 的post提交,不需要编辑validated_data
        if not validated_data.get('image', False):
            validated_data['name'] = ''
            validated_data['image'] = self.initial_data.get('file', 'Data retrieval error')
        # other validation logic
        return validated_data

iview-admin的Upload组件,

<Upload
      ref="imageUpload"
      action="//127.0.0.1:8026/upload/"
</Upload>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值