Joh*_*ter 6 python django django-rest-framework
假设我的网址是POST:/api/v1/my-app/my-model/?myVariable=foo
如何将 传递myVariable
给序列化程序?
# serializer.py
class MySerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = MyModel
def custom_validator(self):
# how can i get the "myVariable" value here?
pass
def validate(self, attrs):
attrs = super().validate(attrs)
self.custom_validator()
return attrs
# views.py
class MyViewset(ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MySerializer
Run Code Online (Sandbox Code Playgroud)
JPG*_*JPG 13
您可以通过request.query_params
属性访问变量
将对象和对象作为序列化器上下文数据ModelViewSet
传递给序列化器的类,并且可以在序列化器中的变量中
访问它request
view
context
request
序列化器中的对象# serializer.py
class MySerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = MyModel
def custom_validator(self):
request_object = self.context['request']
myVariable = request_object.query_params.get('myVariable')
if myVariable is not None:
# use "myVariable" here
pass
def validate(self, attrs):
attrs = super().validate(attrs)
self.custom_validator()
return attrs
Run Code Online (Sandbox Code Playgroud)
get_serializer_context()
方法# serializer.py
class MySerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = MyModel
def custom_validator(self):
myVariable = self.context['myVariable']
#use "myVariable" here
def validate(self, attrs):
attrs = super().validate(attrs)
self.custom_validator()
return attrs
# views.py
class MyViewset(ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MySerializer
def get_serializer_context(self):
context = super().get_serializer_context()
context.update(
{
"myVariable": self.request.query_params.get('myVariable')
}
)
return context
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4991 次 |
最近记录: |