简体   繁体   English

如何在django-rest-framework中将参数传递给序列化器?

[英]How to pass arguments to a Serializer in django-rest-framework?

I have a serializer as: 我有一个序列化器为:

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

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

Now observe skip_place . 现在观察skip_place If I call the DataSerializer instance as: 如果我将DataSerializer实例称为:

DataSerializer(data=data, skip_place=False)

Then it should validate over place as in the code. 然后,它应在确认place在代码中。

But I was not able to pass the argument skip_place=True . 但是我无法传递参数skip_place=True I get an error: TypeError: __init__() got an unexpected keyword argument 'skip_place' 我收到一个错误: TypeError: __init__() got an unexpected keyword argument 'skip_place'

You can send it with including extra context . 您可以在发送时附带其他上下文

In view; 鉴于

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

In serializer; 在序列化器中;

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.")

Hi You can override the init method of serializer, pop the value from there and assign into variable. 您好您可以覆盖序列化器的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.")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM