[英]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.