DRF: как проверить аргументы, переданные в serializer.save ()? - PullRequest
0 голосов
/ 06 апреля 2019

Как я могу проверить дополнительные аргументы, переданные следующим образом:

class MyViewSet(MultiSerializerViewSet):
    # some stuff

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

Как я могу проверить creator в сериализаторе?

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Нельзя проверять поля, переданные в качестве аргументов методу 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 в качестве поля сериализатора. При этом поле будет доступно в потоке проверки.

0 голосов
/ 06 апреля 2019

Среда сброса Django имеет is_valid () метод проверки сериализатора

например,

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

см. это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...