Django REST Framework (AttributeError : Получена ошибка AttributeError при попытке получить значение для поля " " на сериализаторе " ")

Получил ошибку AttributeError : при попытке получить значение для поля Firstname serializer NameSerializer. Поле сериализатора может быть названо неправильно и не соответствовать атрибуту или ключу экземпляра QuerySet. Оригинальный текст исключения был: 'QuerySet' object has no attribute Firstname.

serializers.py

from rest_framework import serializers
from .models import Name, ForeName

class NameSerializer(serializers.ModelSerializer):
   class Meta:
      model = Name
      fields = '__all__'

class ForeNameSerializer(serializers.ModelSerializer):
   forenames = NameSerializer(many=True, read_only=True)
   class Meta:
       model = ForeName
       fields= '__all__'

models.py

from django.db import models
import uuid

# create your models here
class ForeName(models.Model):
   id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
   Forename = models.CharField(max_length=30)

   def __str__(self):
       return self.Forename

class Name(models.Model):
   id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
   Firstname = models.ForeignKey(ForeName, on_delete=models.PROTECT, 
                 related_name="forenames")

views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import NameSerializer
from .models import Name

# Create your views here.
@api_view(['GET'])
def names_list(request):
   names = Name.objects.all()
   myname = NameSerializer(names)
   return Response({"restult": { 
       "Forename" : myname.data,
       }

Вам необходимо добавить many=True в ваш сериализатор при инициализации с несколькими экземплярами.

myname = NameSerializer(names,many=True)

Во-первых, имена полей должны быть полностью строчными, с использованием подчеркивания вместо camelCase, согласно официальному документу. Это соглашение, которому мы все должны следовать. Например - first_name и fore_name

В соответствии с вашим вопросом, вы должны написать myname = NameSerializer(names, many=True) в views.py, потому что вы пытаетесь сериализовать несколько объектов.

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