Django Rest-Framework Во время валидации проверяйте тип метода запроса
Я работаю над вызовом API Validation Errors. Мне нужно убедиться, что 2 даты не пересекаются при выполнении новых вызовов "POST", который работает нормально. Я делаю запрос model.objects.Filter()
и если что-то возвращается, я возвращаю ошибку валидации. Однако я хочу возвращать эту ошибку только при POST-запросах. Я пробовал
if request.method == "POST":
do something
но я получаю ошибки под словом "request", говорящие, что "request" не определен. есть ли другой способ проверить тип метода во время валидации? Я делаю это в своем сериализаторе. Спасибо!
Вы можете передать контекст запроса сериализатору из вашего представления:
serializer = SomeSerializer(context={'request':request}, data=request.data)
В вашем сериализаторе вы можете получить доступ к методу запроса как:
self.context['request'].method
Используйте более одного сериализатора и переопределите get_serializer_class
функцию drf под ваше представление
def get_serializer_class(self):
if self.request.method == 'POST':
return PostSerializer
return OtherMethodsSerializer
По предложению kamran890, вот что я сделал в своем сериализаторе, чтобы выполнять эту валидацию только во время вызова метода POST. Затем другие типы валидации во время других вызовов
if self.contect['request'].method == 'POST':
*do post validation*
else:
*do patch/put validation*