DRF CreateModelMixin с дополнительными полями
Я использую GenericAPIView с CreateModelMixin для создания экземпляра модели. Мне нужно, чтобы мой сериализатор добавлял дополнительные поля, которые не определены пользователем. Мой метод Serializer.create
уже настроен для этого, но я не знаю, как передать поля в метод CreateModelMixin.create
. Вот минимальная версия того, что у меня есть:
class Foo(mixins.CreateModelMixin, generics.GenericAPIView):
permission_classes = [IsAuthenticated]
def get_serializer_class(self):
return FooSerializer
def post(self, request):
return self.create(
request, requester=request.user # Additional field
)
Это не работает - поле requester
не передается в FooSerializer.save
, поэтому FooSerializer
выдает ошибку при попытке доступа к requester
в FooSerializer.create
. Раньше я использовал APIView и вызывал сериализатор напрямую, поэтому я мог просто:
serializer = FooSerializer(data=request.data)
if serializer.is_valid():
foo = serializer.save(requester=request.user)
Есть ли способ достичь этого с помощью GenericAPIView
? Я хочу принять DRF's DRY-ness и избежать вызова сериализаторов в каждом методе конечной точки.
Вместо переопределения метода create
вы можете переопределить perform_create
. Также вам может понадобиться определить метод post
:
class Foo(mixins.CreateModelMixin, generics.GenericAPIView):
permission_classes = [IsAuthenticated]
def get_serializer_class(self):
return FooSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
def perform_create(self, serializer):
serializer.save(requester=self.request.user)