Python 如何在DjangoAPI视图中从模型中获取字段

Python 如何在DjangoAPI视图中从模型中获取字段,python,django,Python,Django,我必须创建使用模型的api视图。我尝试使用headlines.objects.all()获取模型中的所有内容,而第二个视图应该只从模型中获取标题字段,我尝试过过滤,但出现了位置参数错误。这是我的视图文件 from rest_framework import status from rest_framework.response import Response from rest_framework.decorators import api_view from news.models impor

我必须创建使用模型的api视图。我尝试使用headlines.objects.all()获取模型中的所有内容,而第二个视图应该只从模型中获取标题字段,我尝试过过滤,但出现了位置参数错误。这是我的视图文件

from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from news.models import Headline
from news.api.serializers import *

@api_view(['GET',])
def api_detail(request, any):
    try:
        qs = Headline.objects.get(slug=any)
    except Headline.DoesNotExist:
        return Response(status = status.HTTP_404_NOT_FOUND)
    if request.method == "GET":
        serializer = HeadlineSerializer(qs)
        return Response(serializer.data)

@api_view(['GET',])
def api_head(request):
    try:
        py = Headline.objects.all().filter(title=title).order_by('-id')
    except Headline.DoesNotExist:
        return Response(status = status.HTTP_404_NOT_FOUND)
    if request.method == "GET":
        serializer = HeadlineSerializer(py, many=True)
        return Response(serializer.data)
这是我的serializers.py文件

from rest_framework import serializers
from news.models import Headline

class HeadlineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Headline
        fields = ['title', 'contentt']
这是我的URL.py

from django.urls import path
from news.api.views import *

app_name = 'news'

urlpatterns = [
    path('<slug:any>/', api_detail, name='details'),
    path('', api_head, name='api_head'),


]
从django.url导入路径
从news.api.views导入*
应用程序名称='新闻'
URL模式=[
路径('/',api_detail,name='details'),
路径(“”,api_head,name='api_head'),
]

问题出在这一行:

py = Headline.objects.all().filter(title=title).order_by('-id')
title
不是此处定义的变量

如果我理解正确,您只想获得字段标题,因此您会得到如下响应:

[
     {
         "title": "lorem"
     },
     {
         "title": "ipsum"
     },
]
要实现这一点,您可以为该视图创建另一个序列化程序

class HeadlineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Headline
        fields = ['title', 'contentt']  


class HeadlineTitleSerializer(serializers.ModelSerializer):
        class Meta:
            model = Headline
            #fields will filter you response for which fields you want to return in the response.
            fields = ['title']
在您看来:

@api_view(['GET',])
def api_detail(request, any):
    try:
        qs = Headline.objects.get(slug=any)
    except Headline.DoesNotExist:
        return Response(status = status.HTTP_404_NOT_FOUND)
    if request.method == "GET":
        serializer = HeadlineSerializer(qs)
        return Response(serializer.data)

@api_view(['GET',])
def api_head(request):
    py = Headline.objects.all().order_by('-id')
    if request.method == "GET":
        serializer = HeadlineTitleSerializer(py, many=True)
        return Response(serializer.data)

问题出在这一行:

py = Headline.objects.all().filter(title=title).order_by('-id')
title
不是此处定义的变量

如果我理解正确,您只想获得字段标题,因此您会得到如下响应:

[
     {
         "title": "lorem"
     },
     {
         "title": "ipsum"
     },
]
要实现这一点,您可以为该视图创建另一个序列化程序

class HeadlineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Headline
        fields = ['title', 'contentt']  


class HeadlineTitleSerializer(serializers.ModelSerializer):
        class Meta:
            model = Headline
            #fields will filter you response for which fields you want to return in the response.
            fields = ['title']
在您看来:

@api_view(['GET',])
def api_detail(request, any):
    try:
        qs = Headline.objects.get(slug=any)
    except Headline.DoesNotExist:
        return Response(status = status.HTTP_404_NOT_FOUND)
    if request.method == "GET":
        serializer = HeadlineSerializer(qs)
        return Response(serializer.data)

@api_view(['GET',])
def api_head(request):
    py = Headline.objects.all().order_by('-id')
    if request.method == "GET":
        serializer = HeadlineTitleSerializer(py, many=True)
        return Response(serializer.data)

如何在api_头视图中传递标题?显示你的urlsi没有通过。我已经添加了我的URL.pyok,所以如果标题未定义,如何按标题进行过滤?我以前做过,它不起作用。我删除了除筛选器之外的所有内容(错误)。好的,还有一些内容:在api_head中,你可以尝试/期望使用除Headline.DoesNotExist之外的其他内容。DoesNotExist是无用的,当你进行筛选时没有例外,只有当你得到/first/last..ect时,以及“if request.method==”get:“相同的,rest框架和api_视图装饰器为你做这件事;)如何在api_头视图中传递标题?显示你的urlsi没有通过。我已经添加了我的URL.pyok,所以如果标题未定义,如何按标题进行过滤?我以前做过,它不起作用。我删除了除筛选器之外的所有内容(错误)。好的,还有一些内容:在api_head中,你可以尝试/期望使用除Headline.DoesNotExist之外的其他内容。DoesNotExist是无用的,当你进行筛选时没有例外,只有当你得到/first/last..ect时,以及“if request.method==”get:“相同的,rest框架和api_视图装饰器为你做这件事;)我知道。我需要两种不同的观点。一个用于标题,一个用于标题和内容。如果我更改此项,则意味着我无法使用第一个包含标题和内容的序列化程序。您可以有两个序列化程序,一个用于标题,另一个用于标题+内容。我已更新响应。这应该行得通,否则我不确定我是否完全理解你的问题。我知道。我需要两种不同的观点。一个用于标题,一个用于标题和内容。如果我更改此项,则意味着我无法使用第一个包含标题和内容的序列化程序。您可以有两个序列化程序,一个用于标题,另一个用于标题+内容。我已更新响应。这应该行得通,否则我不确定我是否完全理解你的问题。