簡體   English   中英

如何在django-rest-framework中將參數傳遞給序列化器?

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

我有一個序列化器為:

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

現在觀察skip_place 如果我將DataSerializer實例稱為:

DataSerializer(data=data, skip_place=False)

然后,它應在確認place在代碼中。

但是我無法傳遞參數skip_place=True 我收到一個錯誤: TypeError: __init__() got an unexpected keyword argument 'skip_place'

您可以在發送時附帶其他上下文

鑒於

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

您好您可以覆蓋序列化器的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