验证序列化程序django rest框架中的外键字段

时间:2016-06-12 17:49:26

标签: python django rest serialization django-rest-framework

我正在使用django rest框架并且有一个html表单,它将数据发送到其余的api。我正在对请求数据执行serializer.is_valid检查和save()。 在前端表单中,我有一个ID字段,它是序列化程序模型中的外键。当运行serializer.is_valid时,它会抛出一个错误,指出缺少外键对象。为了解决这个问题,我试图使用输入html表单中的id获取外键对象实例,并将其插入序列化数据中。

我在我的序列化程序中编写了一个定义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

1 个答案:

答案 0 :(得分:1)

我现在明白了。如果字段未包含在请求数据中,则验证方法不会被执行。 在请求数据中包含该字段后,该字段的validate方法正在运行。