【发布时间】:2020-07-02 18:03:48
【问题描述】:
我正在用 Django 编写一个使用 Django Rest 框架的应用程序。对 API URL 的 GET 请求有效,但是当我向其添加查询时,例如 '?id=1845' 它实际上并没有执行查询,它仍然返回完整的结果列表。
在下面的代码中,我尝试查询“指标列表”
views.py
from django.shortcuts import render
from django.http import JsonResponse
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import IndicatorSerializer
from data_platform.models import Indicator
@api_view(['GET'])
def apiOverview(request):
api_urls = {
'Indicator List':'/indicator-list/',
'Indicator Detail':'/indicator-detail/<str:pk>/',
}
return Response(api_urls)
@api_view(['GET'])
def indicatorList(request):
indicators = Indicator.objects.all()
serializer = IndicatorSerializer(indicators, many=True)
#filterset_fields = ('id')
#filter_backends = [DjangoFilterBackend]
return Response(serializer.data)
@api_view(['GET'])
def indicatorDetail(request, pk):
indicators = Indicator.objects.get(id=pk)
serializer = IndicatorSerializer(indicators, many=False)
return Response(serializer.data)
urls.py
from django.urls import include, path
from . import views
urlpatterns = [
path('', views.apiOverview, name="api-overview"),
path('indicator-list/', views.indicatorList, name="indicator-list"),
path('indicator-detail/<str:pk>/', views.indicatorDetail, name="indicator-detail"),
]
序列化器.py
from rest_framework import serializers
from data_platform.models import Indicator
class IndicatorSerializer(serializers.ModelSerializer):
class Meta:
model = Indicator
fields = '__all__'
【问题讨论】:
-
我认为您不应该将 id 作为 queryString ``` '?id=1845'``` 传递,您应该将其添加到 URL 的末尾,例如
/indicator-detail/id -
这是我一直在尝试的 URL:localhost:8000/api/indicator-list/?id=1845 - 我也尝试过 localhost:8000/api/indicator-list/id=1845
-
尝试 localhost:8000/api/indicator-list/1845 而不指定 id 关键字,但还要确保列出所有指标的视图支持列出单个指标,否则您将不得不使用指标详细视图表示 URL 将更改为 localhost:8000/api/indicator-detail/1845
-
另外,详细的网址不需要有那个斜线,我会设置为
indicator-detail/<str:pk>而不是indicator-detail/<str:pk>/ -
都试过了,还是不行
标签: python django api rest django-rest-framework