Перезапись ответа django rest для возврата только pk
Я пытаюсь переписать ответ, который отправляется django при создании нового объекта.
Мне нужно вернуть только первичный ключ созданного объекта, а не весь объект целиком.
Функция, которую я пытаюсь перезаписать, выглядит так:
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
data = serializer.data
print(data['id'])
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Где имя поля "id" внутри объекта данных может быть разным для каждой сущности.
Окончательный код должен выглядеть примерно так:
return Response(pk, status=status.HTTP_201_CREATED, headers=headers)
Любая идея о том, как я могу заставить это работать?
Заранее спасибо
То data
, которое ожидает Response
, является dict
, поэтому:
def create(self, request, *args, **kwargs):
...
return Response(
{"pk": serializer.data["id"]},
status=status.HTTP_201_CREATED,
headers=headers,
)
Альтернатива:
Вместо того чтобы использовать .perform_create
, вызовите .save
напрямую. Поймайте экземпляр и используйте его .pk
:
def create(self, request, *args, **kwargs):
...
# self.perform_create(serializer)
instance = serializer.save()
return Response(
{"pk": instance.pk},
status=status.HTTP_201_CREATED,
headers=headers,
)
Вот как можно изменить функцию ответа, чтобы она возвращала только ID (PK) созданных данных в представлении Django REST Framework:
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
data = serializer.data
pk = data['id']
return Response(pk, status=status.HTTP_201_CREATED, headers=headers)
Эта модифицированная функция вернет JSON-ответ, содержащий только ID созданных данных, с кодом состояния 201 (Created).