DRF:如何验证传递给serializer.save()的参数?

时间:2019-04-06 10:07:35

标签: python django serialization django-rest-framework

如何验证这样传递的其他参数:

class MyViewSet(MultiSerializerViewSet):
    # some stuff

    def perform_create(self, serializer):
        serializer.save(creator=self.request.user)

如何在序列化程序中验证creator

2 个答案:

答案 0 :(得分:1)

您无法验证作为参数传递给 serializer.save()方法的字段,它们仅在序列化程序的 create 方法中可用,我建议不要在那里运行验证。在这种情况下,我要做的是覆盖视图集的 create 方法,并在传递给序列化器的数据中添加额外的参数。

class MyViewSet(MultiSerializerViewSet):
    def create(self, request, *args, **kwargs):
        request_data = request.data
        request_data['creator'] = self.user.id

        serializer = self.get_serializer(data=request_data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

使用此设置,您还需要添加 creator 作为序列化字段。这样,该字段将在验证流程中可用。

答案 1 :(得分:0)

Django重置框架具有 is_valid()方法验证序列化器

例如

serializer = YourSerializer(data={'sample1': 'foobar', 'sample2': 'baz'})
serializer.is_valid()
# False
serializer.errors
# {'sample1': ['Some error.'], 'sample2': ['Some error.']}

推荐this