Как передать аргументы сериализатору в django-rest-framework? - PullRequest
0 голосов
/ 20 января 2019

У меня есть сериализатор как:

class DataSerializer(serializers.Serializer):
    skip_place = True
    name = serializers.CharField(max_length=None)
    place = serializers.CharField(max_length=None,required=False)</p>

<code>    def validate_place(self,value):
        if not skip_place and len(value)<=0:
            raise serializers.ValidationError("Place is required.")
</code>

Теперь соблюдайте skip_place. Если я называю DataSerializer экземпляр как:

DataSerializer(data=data, skip_place=False)

Тогда он должен проверяться в течение place, как в коде.

Но я не смог передать аргумент skip_place=True. Я получаю сообщение об ошибке: TypeError: __init__() got an unexpected keyword argument 'skip_place'

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Привет. Вы можете переопределить метод сериализатора init , вывести значение оттуда и присвоить переменной.

class DataSerializer(serializers.Serializer):
   skip_place = True
   name = serializers.CharField(max_length=None)
   place = serializers.CharField(max_length=None,required=False)

   def __init__(self, *args, **kwargs):
       self.skip_place = kwargs.pop('skip_place ', False)
       super().__init__(*args, **kwargs)

   def validate_place(self,value):
     if not self.skip_place and len(value)<=0:
        raise serializers.ValidationError("Place is required.")
0 голосов
/ 20 января 2019

Вы можете отправить его с , включая дополнительный контекст .

В поле зрения;

DataSerializer(data=data, context={'skip_place': True}) # or False

В сериализаторе;

class DataSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=None)
    place = serializers.CharField(max_length=None,required=False)

    def validate_place(self,value):
        skip_place = self.context.get("skip_place") # <- here we use self.context to get extra args
        if not skip_place and len(value)<=0:
            raise serializers.ValidationError("Place is required.")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...