1
resposta

Instancia do Serializer não aceita argumento instance

ERROR: test_verifica_campos_serializados (aluraflix.tests.testes_serializers.ProgramaSerializer)
Teste que verificar se os campos estão sendo serializados
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pablobagano/Desktop/django_apps/drf_teste_documentacao-projeto_inicial/aluraflix/tests/testes_serializers.py", line 13, in setUp
    self.serializer = ProgramaSerializer(instance=self.programa)
TypeError: __init__() got an unexpected keyword argument 'instance'

A instância do Serializer não aceita o argumento 'instance'. Quando eu testo sem nenhum argumento, recebo a seguinte mensagem:

Traceback (most recent call last):
  File "/Users/pablobagano/Desktop/django_apps/drf_teste_documentacao-projeto_inicial/aluraflix/tests/testes_serializers.py", line 19, in test_verifica_campos_serializados
    data = self.serializer.data
AttributeError: 'ProgramaSerializer' object has no attribute 'data' 

Meio óbvio, porque a instância não está vinculada a nenhuma infromação, logo, nenhum atributo. Alguém pode me dar uma luz?

1 resposta

Olá Pablo! Tudo bem?

No Django Rest Framework, normalmente passamos uma instância de um objeto para um Serializer da seguinte maneira:

serializer = ProgramaSerializer(programa)

No entanto, o erro que você está vendo sugere que o Serializer não está esperando um argumento chamado 'instance'. Isso é estranho, porque é assim que normalmente passamos uma instância para um Serializer.

Uma possibilidade é que o Serializer 'ProgramaSerializer' que você está usando não está corretamente configurado ou não é um Serializer do Django Rest Framework. Verifique se o seu Serializer está herdando de 'rest_framework.serializers.Serializer' ou 'rest_framework.serializers.ModelSerializer'.

Por exemplo, seu Serializer deve parecer algo assim:

from rest_framework import serializers
from .models import Programa

class ProgramaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Programa
        fields = '__all__'

Se você estiver usando um Serializer personalizado, certifique-se de que ele aceita um argumento 'instance' em seu método 'init'.

Em relação ao segundo erro, é esperado que você obtenha um AttributeError ao tentar acessar 'self.serializer.data' se você não passou uma instância para o Serializer, pois 'data' é um atributo definido quando uma instância é passada.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software