Python 如何在DjangoAPI视图中从模型中获取字段
我必须创建使用模型的api视图。我尝试使用headlines.objects.all()获取模型中的所有内容,而第二个视图应该只从模型中获取标题字段,我尝试过过滤,但出现了位置参数错误。这是我的视图文件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
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_视图装饰器为你做这件事;)我知道。我需要两种不同的观点。一个用于标题,一个用于标题和内容。如果我更改此项,则意味着我无法使用第一个包含标题和内容的序列化程序。您可以有两个序列化程序,一个用于标题,另一个用于标题+内容。我已更新响应。这应该行得通,否则我不确定我是否完全理解你的问题。我知道。我需要两种不同的观点。一个用于标题,一个用于标题和内容。如果我更改此项,则意味着我无法使用第一个包含标题和内容的序列化程序。您可以有两个序列化程序,一个用于标题,另一个用于标题+内容。我已更新响应。这应该行得通,否则我不确定我是否完全理解你的问题。