Django Ошибка атрибута при использовании сериализатора
Я хочу получить всю таблицу. Моя модель и сериализатор кажутся правильными, но я получаю следующую ошибку
Получили ошибку AttributeError при попытке получить значение для поля
symbolна сериализатореCompanySerializer. Поле сериализатора может быть названо неверно и не соответствовать какому-либо атрибуту или ключу экземпляраQuerySet. Оригинальный текст исключения был: 'QuerySet' object has no attribute 'symbol'.
Ниже приведена моя модель
models.py
from django.db import models
class Companies(models.Model):
symbol = models.CharField(max_length=100)
name = models.CharField(max_length=255)
isin = models.CharField(max_length=255)
serializers.py
from rest_framework import serializers
from .models import Companies
class CompanySerializer(serializers.ModelSerializer):
class Meta:
fields = ['symbol', 'name', 'isin',]
# fields = '__all__'
model = Companies
Ниже представлено мое представление views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Companies
from .serializers import CompanySerializer
from django.core.serializers import json
class companiesView(APIView):
def get(self, request):
companies = Companies.objects.filter(id=1)
serializer = CompanySerializer(companies)
# json_serializer = json.Serializer()
# json_serialized = json_serializer.serialize(companies)
response = Response()
response.data = {
'named' : serializer.data,
}
return response
Я не уверен, что вызывает эту проблему. Заранее спасибо.
companies - это queryset, поэтому то, что у вас есть - это список компаний. Если вы хотите, чтобы ваш сериализатор работал со списком объектов, просто добавьте many=True:
companies = Companies.objects.filter(id=1)
serializer = CompanySerializer(companies, many=True)
# ^^^ Add this
Другой способ - просто получить компанию с идентификатором 1, используя get вместо filter. В этом случае не нужно добавлять many=True, так как сериализатор работает с одним объектом:
companies = Companies.objects.get(id=1)
# ^^^ Use get instead of filter
serializer = CompanySerializer(companies)