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, потому что вы пытаетесь сериализовать несколько объектов.