django rest模型视图集合列表操作在传递查询参数时引发404
如果我传递任何查询参数,得到404 views.py url.py 例如,如果我要求django rest模型视图集合列表操作在传递查询参数时引发404,django,django-rest-framework,django-views,Django,Django Rest Framework,Django Views,如果我传递任何查询参数,得到404 views.py url.py 例如,如果我要求 /api/businesss/-响应代码为200 /api/businesss/?search=a-响应代码为404 使用显示URL命令进行进一步检查(如果有) 似乎您正在使用DjangoRestFramework默认SearchFilter后端,因此必须将search\u字段添加到BusinessViewSet类中 另外,从浏览器中检查路线,以查看表单及其按钮(筛选按钮)是否可用且是否正常工作 提及 仅当视
-响应代码为200/api/businesss/
-响应代码为404/api/businesss/?search=a
显示URL
命令进行进一步检查(如果有)
似乎您正在使用DjangoRestFramework默认SearchFilter
后端,因此必须将search\u字段添加到BusinessViewSet
类中
另外,从浏览器中检查路线,以查看表单及其按钮(筛选按钮)是否可用且是否正常工作
提及
仅当视图设置了“搜索字段”属性时,才会应用SearchFilter类
由于您没有search\u字段
,SearchFilter
未使用。我调试了代码,发现了问题
hasUserName权限代码
查询传递的参数时,解析方法引发404异常
我将代码改为down blow,我的问题就解决了
class HasUsernamePermission(BasePermission):
"""
User must has username
"""
message = _('User must has username')
def has_permission(self, request, view):
# Instance must have an attribute named `owner`.
if view.__class__.__name__ == 'UserViewSet' and view.action == 'detail' and request.method == 'PATCH': # user probably set username
return True
return bool(request.user.username)
谢谢朋友们对我的问题的反馈你能为这个视图显示你的URL吗?我添加了搜索字段和我的问题没有解决我添加了搜索字段和我的问题没有解决你的业务
模型有用户名
列,是否有用户名=a
的业务?是的,想象一下,如果不存在,它必须返回一个空列表,而不是引发404错误
from rest_framework.routers import DefaultRouter
from businesses.api.views import BusinessViewSet
app_name = "businesses"
router = DefaultRouter()
router.register(r'', BusinessViewSet,basename="business")
urlpatterns = []
urlpatterns += router.urls
from rest_framework.permissions import BasePermission
from django.utils.translation import gettext_lazy as _
from django.urls import resolve
class HasUsernamePermission(BasePermission):
"""
User must has username
"""
message = _('User must has username')
def has_permission(self, request, view):
# Instance must have an attribute named `owner`.
if resolve(request.get_full_path()).url_name == 'user-detail' \
and request.method == 'PATCH': # user probably set username
return True
return bool(request.user.username)
class HasUsernamePermission(BasePermission):
"""
User must has username
"""
message = _('User must has username')
def has_permission(self, request, view):
# Instance must have an attribute named `owner`.
if view.__class__.__name__ == 'UserViewSet' and view.action == 'detail' and request.method == 'PATCH': # user probably set username
return True
return bool(request.user.username)