Вы можете получить доступ к переменной через request.query_params
атрибут
Как это возможно через сериализатор?
ModelViewSet
класс, передающий объект request
и view
объекту сериализатору как контекстные данные сериализатора , и он доступен в сериализаторе в context
переменная
Метод 1: напрямую использовать объект request
в сериализаторе
# serializer.py
class MySerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = MyModel
<b>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</b>
def validate(self, attrs):
attrs = super().validate(attrs)
self.custom_validator()
return attrs
Метод 2: переопределить get_serializer_context()
метод
# serializer.py
class MySerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = MyModel
<b>def custom_validator(self):
myVariable = self.context['myVariable']
#use "myVariable" here</b>
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
<b>def get_serializer_context(self):
context = super().get_serializer_context()
context.update(
{
"myVariable": self.request.query_params.get('myVariable')
}
)
return context</b>