Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django rest模型视图集合列表操作在传递查询参数时引发404_Django_Django Rest Framework_Django Views - Fatal编程技术网

django rest模型视图集合列表操作在传递查询参数时引发404

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类中 另外,从浏览器中检查路线,以查看表单及其按钮(筛选按钮)是否可用且是否正常工作 提及 仅当视

如果我传递任何查询参数,得到404

views.py url.py 例如,如果我要求

  • /api/businesss/
    -响应代码为200
  • /api/businesss/?search=a
    -响应代码为404

使用
显示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)