Я уже некоторое время пользуюсь сериализаторами django, и, похоже, каждый раз, когда я отправляю полезную нагрузку с помощью put / post / patch, serializers.is_valid()
проверяет только правильность типов атрибутов данных полезной нагрузки, присутствуют необходимыеи не проверяет, есть ли избыточные данные в полезной нагрузке, не определенной в models.py
Допустим, у меня есть models.py :
class Task(models.Model):
title = models.CharField(max_length=100, default='default_task_name')
description = models.CharField(max_length=1000, blank=True, default='')
complete = models.BooleanField(default=False)
canceled = models.BooleanField(default=False)
date = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('id', 'date')
В моем serializers.py
у меня есть следующее:
from rest_framework import serializers
from .models import Task
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = '__all__'
В моем views.py
у меня есть следующее:
class TaskDetails(APIView):
def get_object(self, pk):
try:
return Task.objects.get(pk=pk)
except Task.DoesNotExist:
raise Http404
def put(self, request, pk):
data = JSONParser().parse(request)
serializer = TaskSerializer(self.get_object(pk), data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=HTTP_201_CREATED)
return Response(serializer.errors, status=HTTP_422_UNPROCESSABLE_ENTITY)
с использованием cURL
:
curl -X PUT -H "Content-Type: application/json" -d '{"title":"task_1", "description":"learning rest", "task_force":"undefined "}' "my_api_uri"
I, за исключением получения ошибки, подобной этой:
'errors': {'task_force': ['undefined attribute task_force'], 'status_code': '422'}
, поскольку полезная нагрузка содержит task_force, который не определен внутри models.py или serializers.py
Но я получаю ответ без ошибок:
{data={"title":"task_1", "description":"learning rest", "task_force":"undefined "}, "status_code": '201'}
`
Какая здесь работа, чтобы выполнить эту проверку с помощью сериализатора?