Перезапись ответа 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).

Вернуться на верх