Django Rest Framework: Como adicionar um atributo em tempo real em um Serializer

Recentemente precisei de um campo em um dos meus serializers que seria gerado em tempo de execução. Eu tinha um serializer de anúncios e precisava de uma flag chamada "liked" que iria indicar se o usuário logado tinha dado like ou não em cada um dos anúncios do json retornado com base nas informações dos dados de uma outra tabela.

Para esse tipo de coisa, o Django Rest Framework nos disponibiliza o SerializerMethodField. Esse serializer recebe o valor de um método presente na classe serializadora na qual está anexado.

O método em questão deve ter seu nome começado com get e sua assinatura sempre deve receber o objeto em questão, ficando dessa forma:

Se quiséssemos contabilizar quantos dias fazem desde que o usuário criou sua conta no sistema, poderíamos fazer da seguinte forma:

O nome do método sempre tem que seguir o padrão get_field, ou passar o método como parâmetro para o SerializerMethodField utilizando o parâmetro source da seguinte forma:

Simples né?

❤ Gostou? Vamos espalhá-lo — curte e compartilha aí o/