【问题标题】:Django is unable to find the view used for query params the other views are working perfectlyDjango 无法找到用于查询参数的视图,其他视图工作正常
【发布时间】:2021-01-20 08:22:27
【问题描述】:

#urls.py

from django.urls import include,path
from rest_framework import routers
from . import views

router=routers.DefaultRouter()
router.register(r'banks',views.BanksViewSet)
router.register(r'branches',views.BranchesViewSet)
router.register(r'branches/autocomplete/',views.BranchAutocompleteViewSet, basename='branches')

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

#views.py

from django.shortcuts import render
from rest_framework import viewsets
from .serializers import BanksSerializer,BranchesSerializer
from .models import Banks,Branches

class BanksViewSet(viewsets.ModelViewSet):
    queryset=Banks.objects.all().order_by('id')
    serializer_class= BanksSerializer

class BranchesViewSet(viewsets.ModelViewSet):
    queryset=Branches.objects.all().order_by('ifsc')
    serializer_class=BranchesSerializer

class BranchAutocompleteViewSet(viewsets.ModelViewSet):
    serializer_class=BranchesSerializer
    def get_queryset(self):
        branchName=self.request.query_params.get("q")
        limit=self.request.query_params.get("limit")    
        offset=self.request.query_params.get("offset")
        queryset=Branches.objects.filter(branch__startswith=branchName).order_by('ifsc')[offset:limit]
        return queryset

BanksViewSet 和 BranchesViewSet 工作正常,但另一个不工作 问题可能是 urls.py 中的基本名称,因为即使保留为空字符串,更改它也无济于事。

这就是控制台的功能: Django 版本 3.1.5,使用设置“bankApi.settings” 在http://127.0.0.1:8000/ 启动开发服务器 使用 CTRL-BREAK 退出服务器。 未找到:/分支/自动完成/ [19/Jan/2021 18:30:04]“GET /branches/autocomplete/?q=A&limit=5&offset=0 HTTP/1.1”404 12148

【问题讨论】:

    标签: django django-rest-framework django-queryset


    【解决方案1】:

    确保您的根 url branches 注册 last 如下:

    ...
    router.register(r'banks',views.BanksViewSet)
    router.register(r'branches/autocomplete/',views.BranchAutocompleteViewSet, basename='branches')
    router.register(r'branches',views.BranchesViewSet) # root of 'branches' is last
    ...
    

    【讨论】:

    • 谢谢,虽然views.py中有一个小错误,但它现在可以工作了我所要做的就是类型转换限制和偏移到int
    猜你喜欢
    • 2019-02-07
    • 2021-01-17
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多