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)
如果图标场未在JSON参与此工作将被请求的DRF。这可能是一个解决方案,但如果我不想删除我的JSON请求上的'图标'键 –
@DeanChristianArmada它应该像'icon:'''这样的空键使用,你试过了吗? –
噢好吧,我会尽快尝试 –