尝试获取序列化程序上的字段值时出现 AttributeError

use*_*776 9 django serialization

我收到以下错误

尝试获取first_nameserializer 上的字段值时出现 AttributeError AthleteSerializer。序列化器字段可能命名不正确,并且与QuerySet实例上的任何属性或键都不匹配 。原始异常文本是:'QuerySet' 对象没有属性 'first_name'。

为什么我会收到错误消息?

这是我的views.py:

from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Athlete

from athletics.serializers import AthleteSerializer

class ListAthletes(APIView):
    def get(self, request, format=None):
        all_athletes = Athlete.objects.all()
        import pdb; pdb.set_trace()
        serializer = AthleteSerializer(all_athletes)
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

这是我的 serializers.py

from rest_framework import serializers
from .models import Athlete

class AthleteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Athlete
        fields = (
            'first_name',
            'last_name'
        )
Run Code Online (Sandbox Code Playgroud)

这是我的models.py:

from django.db import models

class Athlete(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

Has*_*ani 23

尝试这个:

serializer = AthleteSerializer(all_athletes, many=True)
Run Code Online (Sandbox Code Playgroud)

  • 如果你不介意我问一个后续问题。如果我想了解任何特定的 Django 函数以及应传递给它的参数,那么在哪里可以找到它呢?当我用谷歌搜索时,我经常会找到 djangoproject.com 文档,该文档看起来非常冗长,我必须仔细阅读才能了解可以传递哪些参数。 (2认同)
  • @user1283776 ,我经常看 django 文档和 stackoverflow 问题。 (2认同)

小智 6

哈桑 指出 many=True 是正确的。它在 DRF 中的含义是:由于您的 serializer.data 将是一个列表,并且列表中的每个项目都需要转换为 Python 数据类型,这些数据类型将进一步轻松呈现为 JSON、XML。对于登陆此帖子的任何人:不要与多对多关系混淆。