2017-03-01 45 views
2

我們在開發中使用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

回答

1

取決於你的錯誤,我認爲問題是,ImageField是必填字段。所以你應該使用blank=True在表單中跳過驗證。您也可能需要MultiPartParser來解析圖像。

class Website(models.Model): 

    icon = models.ImageField(blank=True) 

DRF parsers

+0

如果圖標場未在JSON參與此工作將被請求的DRF。這可能是一個解決方案,但如果我不想刪除我的JSON請求上的'圖標'鍵 –

+0

@DeanChristianArmada它應該像'icon:'''這樣的空鍵使用,你試過了嗎? –

+0

噢好吧,我會盡快嘗試 –