Django Rest Framework默认图像字段值返回验证

Django Rest Framework默认图像字段值返回验证

问题描述:

我们在开发中使用REST,并且在我们的应用程序中有一个网站管理功能。名称,说明,标题和图标将来自API。我们在另一个前端应用程序上也有一个管理界面,可以对API进行更改。Django Rest Framework默认图像字段值返回验证

这里是models.py

class Website(models.Model): 

    icon = models.ImageField() 
    name = models.CharField(max_length=100) 
    second_name = models.CharField(max_length=100) 
    description = models.TextField() 

这里是serializers.py:

class WebsiteSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Website 
     fields = '__all__' 

这里是views.py

class WebsiteViewSet(mixins.RetrieveModelMixin, 
        mixins.ListModelMixin, 
        mixins.UpdateModelMixin, 
        viewsets.GenericViewSet): 

    model = Website 
    queryset = Website.objects.filter() 
    permission_classes = [] 
    renderer_classes = [renderers.JSONRenderer] 
    serializer_class = WebsiteSerializer 

    def list(self, request): 
     serializer = self.get_serializer(self.queryset.first()) 
     data = serializer.data 
     return Response(data) 

我的问题是图标。当你更新图标时它工作正常。但是它返回'提交的数据不是文件。检查表单上的编码类型。'验证错误,当你没有更改图标..

这是当你的API的数据返回什么一个例子:

{ 
"id": 1, 
"icon": "http://192.168.0.110:8000/upload/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2017-02-23_%E4%B8%8B%E5%8D%886.02.42_zbAld6c.png", 
"name": "Hello", 
"second_name": "World", 
"description": "Bacon Loren Ipsum Porsum" 
} 

我觉得这里的问题是,当我们不要更改前端的图标,URL字符串值是正在返回的值。我们如何解决这个问题?

P.S.

  • 我们正在利用我们的前端vue.js
  • DRF版本是3.5.1

取决于你的错误,我认为问题是,ImageField是必填字段。所以你应该使用blank=True在表单中跳过验证。您也可能需要MultiPartParser来解析图像。

class Website(models.Model): 

    icon = models.ImageField(blank=True) 

DRF parsers

+0

如果图标场未在JSON参与此工作将被请求的DRF。这可能是一个解决方案,但如果我不想删除我的JSON请求上的'图标'键 –

+0

@DeanChristianArmada它应该像'icon:'''这样的空键使用,你试过了吗? –

+0

噢好吧,我会尽快尝试 –