使用django_restframework从数据库获取并返回一个字段

使用django_restframework从数据库获取并返回一个字段,django,api,django-rest-framework,Django,Api,Django Rest Framework,因此,我一直在尝试使用Django rest_框架制作一个API,该API只会从表中返回1个字段。我一直试图从中学习这个示例,但无法重新创建它。每当我写信的时候”http://localhost:8000/api/students/fields=id/,我得到一个带有“详细信息”的404错误:“未找到” 我还尝试在view类中添加一个额外的方法,如本例所示: @action(methods=['get'], detail=False) def newest(self, request):

因此,我一直在尝试使用Django rest_框架制作一个API,该API只会从表中返回1个字段。我一直试图从中学习这个示例,但无法重新创建它。每当我写信的时候”http://localhost:8000/api/students/fields=id/,我得到一个带有“详细信息”的404错误:“未找到”

我还尝试在view类中添加一个额外的方法,如本例所示:

@action(methods=['get'], detail=False)
    def newest(self, request):
        newest = self.get_queryset().order_by('created_at').last()
        serializer = self.get_serializer_class()(newest)
        return Response(serializer.data)
用“获取id列表”之类的东西代替,但我还没有完全弄明白

还有,是否有人知道这些方法将首先从数据库中检索所有字段,然后过滤掉它需要的内容,或者查询将调整为只要求指定的字段?这些表可能会变得相当大,因此如果不获取不必要的数据,可能会节省大量时间

下面是serializer.py中的代码

from rest_framework.serializers import ModelSerializer

from .models import Student, Coverage


class DynamicFieldsModelSerializer(ModelSerializer):
    """
    A ModelSerializer that takes an additional `fields` argument that
    controls which fields should be displayed.
    """

    def __init__(self, *args, **kwargs):
        # Don't pass the 'fields' arg up to the superclass
        fields = kwargs.pop('fields', None)

        # Instantiate the superclass normally
        super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)

        if fields is not None:
            # Drop any fields that are not specified in the `fields` argument.
            allowed = set(fields)
            existing = set(self.fields)
            for field_name in existing - allowed:
                self.fields.pop(field_name)

class StudentSerializer(DynamicFieldsModelSerializer, ModelSerializer):
    class Meta: 
        model = Student
        fields = ['id', 'name', 'course', 'rating']
models.py

from django.db import models



class Student(models.Model):
    name = models.CharField(max_length=140)
    course = models.CharField(max_length=140)
    rating = models.IntegerField()

    class Meta:
        ordering = ['name']
views.py

from rest_framework.viewsets import ModelViewSet, ViewSet
from rest_framework.response import Response
from rest_framework.decorators import action

from .models import Student, Coverage
from .serializers import StudentSerializer, CoverageSerializer, CoverageNrSerializer

import logging

logger = logging.getLogger(__name__)


class StudentsViewSet(ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer