Depois de um período, pesquisa e debug em situações parecidas, queria deixar registrado aqui o que aparentemente acontece.

A diferença chave entre validated_data e initial_data é:

initial_data: Contém os dados brutos que foram enviados para o serializer. Esses dados ainda não foram validados nem transformados.

validated_data: Contém os dados após terem sido validados. Os campos que representam relações com outros modelos, como ForeignKey, são convertidos em instâncias do modelo correspondente se a validação for bem-sucedida.

No meu caso,"employee": 1 é enviado como parte do JSON. Quando o serializer é validado:

self.initial_data["employee"] contém o valor bruto 1. validated_data["employee"] deve conter uma instância do modelo User correspondente ao id 1 uma vez que o campo employee é um campo de relação em Models.

Como validated_data["employee"] está retornando um objeto do tipo User, isso significa que o DRF conseguiu resolver a referência id para um objeto User durante a validação.


Quando você usa o PrimaryKeyRelatedField em um serializer do Django Rest Framework, o comportamento padrão é que, após a validação, o validated_data contém a instância do objeto referenciado, não apenas o ID. Isso ocorre porque o DRF resolve a referência de chave primária para o objeto correspondente durante a validação para garantir que o ID fornecido aponte para um objeto válido.

No entanto, se o objetivo é ter apenas o ID no validated_data após a validação, eu teria que personalizar o comportamento do serializer. Por padrão, tanto a abordagem explícita (definindo PrimaryKeyRelatedField) quanto a implícita (deixando o DRF inferir o campo com base no modelo) resultarão em validated_data contendo o objeto inteiro.

Para manter apenas o ID em validated_data, seria necessário uma abordagem personalizada, talvez sobrescrevendo o método to_internal_value ou create/update no serializer para manipular validated_data de forma que apenas o ID seja armazenado.