2016-06-12 108 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

你可以分享代码吗? –

相关问题