Django Ошибка экземпляров сериализаторов Rest Framework - PullRequest
1 голос
/ 07 февраля 2020

Здравствуйте, я новичок в классах DRF

Я пытаюсь получить данные из базы данных в JSON в API, но данные находятся во многих полях во многих таблицах, связанных внешними ключами ,

Я хочу передать идентификатор из данных, и API получит все связанные данные с этим полем.

Как и в случае присоединения SQL

Я делаю это создание сериализаторов и просмотров из моих моделей.

Одна из моих моделей:

class ModelPer(ModelMMixin, SQLMixin):
'''Model 
'''
descricao = models.CharField(
    verbose_name = _(u'Descrição'),
    max_length = 250,
    unique = False
)

ativo = models.BooleanField(
    verbose_name= _(u'Ativo'),
    default = False
)

slug = models.SlugField(
    max_length=150,
    unique=True,
    default=uuid.uuid4()
)

Мои сериализаторы:

class PerSerializer(serializers.ModelSerializer):

class Meta:
    model = ModelPer
    fields = ['id', 'descricao']

My Вид:

class PerView(APIView):
"""
View that return all forms in app
"""
def get(self, request):
    queryset = ModelPer.objects.all()
    serializer = PerSerializer(queryset)
    print(serializer.data)
    return Response(serializer.data)

Но я получаю пустое Json, поэтому, когда я пытаюсь отладить в Django оболочке, я получаю это:

>>> from per.models import ModelPer
>>> from api_form.serializers import PerSerializer
>>> queryset = ModelPer.objects.all()
>>> serializer = PerSerializer(queryset)
>>> serialzaer.data

ОШИБКА

Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре QuerySet`. Исходный текст исключения был: объект 'QuerySet' не имеет атрибута 'descricao'.

И когда я пытаюсь в терминале проверить сериализатор, как:

>>> seriializer

Я получаю:

PerspectivaSerializer(<QuerySet [<ModelPer: Pespectiva 1>, <ModelPer: Pespectiva 2>, <ModelPer: Pespectiva 3>]>):
id = IntegerField(label='ID', read_only=True)
data_cadastro = DateTimeField(label='Data de Cadastro', required=False)
excluido = NullBooleanField(label='Excluído?', required=False)
data_exclusao = DateTimeField(allow_null=True, label='Data de Exclusão', required=False)
descricao = CharField(label='Descrição', max_length=250)
ativo = BooleanField(required=False)
slug = SlugField(allow_unicode=False, max_length=150, required=False, validators=[<UniqueValidator(queryset=ModelPer.objects.all())>])
usuario_cadastro = PrimaryKeyRelatedField(allow_null=True, label='Usuário que realizou o Cadastro', queryset=User.objects.all(), required=False)
usuario_exclusao = PrimaryKeyRelatedField(allow_null=True, label='Usuário que realizou a exclusão', queryset=User.objects.all(), required=False)

Когда я проверяю набор запросов, все в порядке!

Кто-нибудь может мне помочь? Где его моя ошибка! Спасибо

1 Ответ

2 голосов
/ 07 февраля 2020

Чтобы сериализовать список объектов queryset или вместо одного экземпляра объекта, вы должны передать флаг many=True, когда создание экземпляра сериализатора. Затем вы можете передать набор запросов или список объектов для сериализации

Итак, используйте параметр many=True как,

serializer = PerSerializer(queryset, <b>many=True</b>)
...