2016-06-12 104 views
1

我正在使用django rest框架並具有向其餘api發送數據的html表單。我正在對請求數據進行serializer.is_valid檢查並保存()。 在前端窗體中,我有一個ID字段,它是序列化程序模型中的外鍵。當serializer.is_valid運行時,它會拋出一個錯誤,指出外鍵對象丟失。爲了克服這個問題,我試圖從輸入html表單中獲取使用id的外鍵對象實例,並將其插入到序列化器數據中。驗證序列化程序中的外鍵字段django rest框架

我已經在我的序列化程序中寫了一個定義validate_,並且假設它在serializer.is_valid()被執行時運行(按照本教程 - http://www.django-rest-framework.org/api-guide/serializers/#validation)。但是這個定義並沒有被執行。感謝幫助。

class TeamViewSet(viewsets.ModelViewSet): 
    serializer_class = TeamSerializer 
    queryset = Team.objects.all() 
    def create(self, request, *args, **kwargs): 

     permission_classes = (
      permissions.IsAuthenticated 
     ) 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid() 


     return Response(.....) 

串行

class TeamSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Team 
     fields = ('id','name','description','leader') 

    def validate_leader(self, leader_id): 
     try: 
      data = Leaders.objects.get(id=leader_id) 
     except Exception as e: 
      raise ValidationError(....) 
     return data 
+0

請添加代碼。 –

+0

@Rahul Gupta添加代碼 –

+1

,而不是'除了Exception:e:'你可以使用'Leaders.DoesNotExist'即。對於任何你可以使用'Model.DoesNotExist'的模型。 –

回答

1

我現在明白了。如果該字段未包含在請求數據中,則驗證方法不會執行。 在請求數據中包含該字段後,該字段的驗證方法正在運行。

+0

你可以分享代碼嗎? –

相關問題