当前位置: 首页 > 知识库问答 >
问题:

如何在Django REST框架中更改URL中的默认搜索查询参数?

平和雅
2023-03-14

在Django REST框架中。默认情况下,它使用-/?搜索=在URL中搜索任何内容。例如http://127.0.0.1:8000/api/branches/?search=RTGS 此url已成功获取结果。但我需要将URL更改为http://127.0.0.1:8000/api/branches/autocomplete?q=RTGS

在留档中,https://www.django-rest-framework.org/api-guide/settings/#search_param给出是默认设置的,https://www.django-rest-framework.org/api-guide/settings/#search_paramd我们可以更改。我想知道怎么做。

谢谢

https://www.django-rest-framework.org/api-guide/settings/#search_param

网址。来自django的py。URL导入路径,包括从。从rest_框架导入视图导入路由器

router = routers.DefaultRouter()
# router.register('bank', views.BankView)
router.register('branches/autocomplete', views.BankDetailView)
# router.register('branches/list', views.BankAPIListView)



urlpatterns = [
    path('api/', include(router.urls)),

]

views.py

from django.shortcuts import render, redirect
from rest_framework import viewsets
from .models import Branches
from .serializers import BranchesSerializer
from rest_framework import filters
from rest_framework.filters import OrderingFilter
from rest_framework.pagination import PageNumberPagination  
# from django_filters.rest_framework import DjangoFilterBackend





class BankDetailView(viewsets.ModelViewSet):
    queryset = Branches.objects.all()
    serializer_class = BranchesSerializer
    filter_backends = [filters.SearchFilter, OrderingFilter]
    # Partial Search with the field in branch
    search_fields = ['^branch']
    # Ordering Filter field by ifsc in ascending order
    # filter_backends = [DjangoFilterBackend]
    # filterset_fields = ['ifsc']

serializers.py

from rest_framework import serializers
from .models import Branches

class BranchesSerializer(serializers.HyperlinkedModelSerializer):
    class Meta :
        model = Branches
        fields = ['url' ,'ifsc', 'bank_id', 'branch', 'address', 'city', 
'district', 'state']

http://127.0.0.1:8000/api/branches/autocomplete?q=RTGS

共有2个答案

贺经纶
2023-03-14

如果只想在一个视图中更改查询参数键,可以扩展SearchFilter,然后将其添加到视图的filter\u backends

class CustomSearchFilter(SearchFilter):
    search_param = "q"


class MyListView(ListAPIView):
    # ...
    filter_backends = [CustomSearchFilter]
    # ...
长孙弘壮
2023-03-14

从文档中:

默认情况下,搜索参数名为'search',但这可能会被搜索参数设置覆盖。

因此,在您的settings.py中:

REST_FRAMEWORK = {
    'SEARCH_PARAM': 'q'
}

编辑:

在这里您可以看到实际的代码:

设置:https://github.com/encode/django-rest-framework/blob/master/rest_framework/settings.py#L68

过滤器:https://github.com/encode/django-rest-framework/blob/master/rest_framework/filters.py#L42

 类似资料:
  • 问题几乎说明了一切。 例如将默认url(http://127.0.0.1:8000)更改为自定义(https://api.example.com/v1) 我正在使用HyperlinkedModels,在开发过程中,一切似乎都正常工作。将应用程序移动到具有自定义url的其他服务器会给我带来问题。 如何更改默认url: 对于自定义的,让我们说:

  • 我有一个apikey“令牌”,它必须在每个请求中作为查询参数提供。我如何设置翻新,以便始终在请求中包含此查询参数? 我当前将内标识作为默认参数提供: 但是由于我知道每个请求都需要相同的令牌,所以在我创建的每个请求函数中必须提供它作为默认参数,这感觉是多余的。我如何设置reverfit来用默认的查询参数修饰每个传出的请求? 这是我如何构建reverfit2实例的: 我认为在调用.build()之前,

  • 问题内容: 我正在使用weblogic和oracle对Web应用程序进行编程。数据源是通过JNDI配置的,具有受限制的数据库用户,该用户可以DML到表中,但不能DDL。您可能会猜到,该用户不是这些表的所有者,但已授予该用户访问权限。 假设他是GUEST_USER 该应用程序正在使用JPA + EclipseLink,并且已经定义了许多实体。我不想在每个实体类中都写入要更改架构的属性。我已经尝试过使

  • 问题内容: 我正在尝试定义一个可选的查询参数,该参数将映射到,但当URL中不存在该参数时: …并且我本质上想检查它是否传入: 但是,出现编译错误: 类型不匹配; 找到:Null(null)必需:Long请注意,隐式转换不明确,因为它们是模棱两可的:类LowPriorityImplicits中类型为(x:Null)Long的方法Long2longNullConflict和对象类型为(x:Long)L

  • 我已经这样配置了我的axios 在我的组件中,我作为 现在,上面的方法可以工作了,但是我想在不影响全局基本URL的情况下更改,这样在我的组件中,我就可以在没有APIendpoint的情况下简单地使用它 我已经试过了 我该怎么办?

  • 我对弹性搜索完全陌生。我在试着从弹性搜索中取记录。 我查了文件,但找不到任何解决办法。如果你在这里给我一些提示或一些网站,我可以解决我的问题,我将非常感谢。