【问题标题】:Django Rest Framework default image field value returns ValidationDjango Rest Framework 默认图像字段值返回验证
【发布时间】:2017-03-01 02:43:51
【问题描述】:

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

这里是 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 字符串值。我们如何解决这个问题?

附言

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

【问题讨论】:

    标签: python django rest django-rest-framework vue.js


    【解决方案1】:

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

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

    DRF parsers

    【讨论】:

    • 如果图标字段不涉及到向 DRF 请求的 JSON,这将起作用。这可能是一个解决方案,但如果我不想删除我的 JSON 请求中的“图标”键怎么办
    • @DeanChristianArmada 它应该使用像 icon: '' 这样的空键,你试过了吗?
    • 哦,好的,我会尽快尝试
    猜你喜欢
    • 1970-01-01
    • 2015-02-19
    • 2020-01-28
    • 2015-09-25
    • 2017-07-12
    • 2021-04-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多