Python Django Rest框架默认图像字段值返回验证

Python Django Rest框架默认图像字段值返回验证,python,django,rest,django-rest-framework,vue.js,Python,Django,Rest,Django Rest Framework,Vue.js,我们正在开发中使用REST,我们的应用程序上有一个站点管理功能。其中,名称、描述、标题和图标将来自API。我们在另一个前端应用程序上也有一个管理界面,可以对API进行更改 这是模型。py: class Website(models.Model): icon = models.ImageField() name = models.CharField(max_length=100) second_name = models.CharField(max_length=100)

我们正在开发中使用REST,我们的应用程序上有一个站点管理功能。其中,名称、描述、标题和图标将来自API。我们在另一个前端应用程序上也有一个管理界面,可以对API进行更改

这是模型。py

class Website(models.Model):

    icon = models.ImageField()
    name = models.CharField(max_length=100)
    second_name = models.CharField(max_length=100)
    description = models.TextField()
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)
下面是序列化程序。py:

class WebsiteSerializer(serializers.ModelSerializer):

    class Meta:
        model = Website
        fields = '__all__'
以下是视图。py

class Website(models.Model):

    icon = models.ImageField()
    name = models.CharField(max_length=100)
    second_name = models.CharField(max_length=100)
    description = models.TextField()
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字符串值就是返回的值。我们如何解决这个问题

附言

  • 我们在前端使用vue.js
  • DRF版本为3.5.1

    • 取决于您的错误,我认为问题在于
      ImageField
      是必填字段。因此,您应该使用
      blank=True
      跳过表单中的验证。您可能还需要一个
      多部分解析器来解析图像

      class Website(models.Model):
      
          icon = models.ImageField(blank=True)
      

      如果向DRF请求的JSON中不涉及图标字段,则此操作将起作用。这可能是一个解决方案,但如果我不想删除JSON上的“icon”键怎么办request@DeanChristianArmada它应该可以与空键一起工作,比如
      图标:'
      ,你试过了吗?哦,好的,当然,我会尽快尝试