Патч в сериализаторе django rest
У меня есть 1 родительский и 1 дочерний сериализатор, сейчас дочерний сериализатор наследует все поля, функции и методы от родительского сериализатора. Я хотел бы модифицировать запрос патча в дочернем сериализаторе, чтобы во время выполнения запроса патча, некоторые поля будут недоступны для обновления, потому что будут совершенно разные два URL. Например, в дочернем классе будет невозможно обновить имя и фамилию.
class Parent(serializers.ModelSerializer):
class Meta(BaseMeta):
model = Account
fields = BaseMeta.fields + (
'name', 'surname', 'age', 'city', 'country', 'job', 'family')
extra_kwargs = {'name': {'required': True, 'allow_blank': False, 'allow_null': False, 'trim_whitespace': False},
'surname': {'required': True, 'allow_blank': False, 'allow_null': False, 'trim_whitespace': False},
'country': {'read_only': True},
'job': {'required': True, 'allow_blank': False, 'allow_null': False, },
}
class Child(ParentSerializer):
class Meta(BaseMeta):
model = Account
fields = BaseMeta.fields + ()
extra_kwargs = {
}
Для реализации PATCH
api можно создать детальное представление.
from rest_framework import generics, mixins
from .models import Child
from .serializers import Child as ChildSerializer
class ChildDetail(mixins.UpdateModelMixin, generics.GenericAPIView):
queryset = Child.objects.all()
serializer_class = ChildSerializer
def patch(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs)
В представлении деталей вы также можете добавить get
, retrieve
, put
, delete
метод.
Надеюсь, это может помочь.