Django REST框架过滤的问题?

Django REST框架过滤的问题?,django,python-3.x,django-rest-framework,Django,Python 3.x,Django Rest Framework,我在使用Django Rest框架时遇到了这个问题。我正在尝试使用患者id执行get请求。现在,假设我查找patientid=6,api返回patientid=6、patientid=26以及任何包含数字“6”的id的结果。它看起来像是在搜索一个子字符串。我想让它工作起来,使patient id=6只返回id=6的patientid结果 序列化程序.py class Radiologypdfserializerdata(serializers.ModelSerializer): cla

我在使用Django Rest框架时遇到了这个问题。我正在尝试使用患者id执行get请求。现在,假设我查找patientid=6,api返回patientid=6、patientid=26以及任何包含数字“6”的id的结果。它看起来像是在搜索一个子字符串。我想让它工作起来,使patient id=6只返回id=6的patientid结果

序列化程序.py

class Radiologypdfserializerdata(serializers.ModelSerializer):

    class Meta:
        model = models.Radiologypdf
        fields = (
            'patientid',
            'testinfo',
            'clinicalindication',
            'attendingdoctor',
            'patientname',
            'age',
            'mobilenumber',
            'sex',
            'email',
            'doctorsname',
            'doctorsregistrationnumber',
            'clinicname',
            'doctorstelno',
            'createdtime',
            'radiology_id',
            'created',

        )
api.py

class RadiologypdfViewSet(viewsets.ModelViewSet):
    """ViewSet for the radiology class"""

    queryset = models.Radiologypdf.objects.all()
    serializer_class = serializers.Radiologypdfserializerdata
    permission_classes = [permissions.IsAuthenticated]

    filter_backends = (filters.SearchFilter,)
    search_fields = ('patientid','radiology_id')
您可以使用该库进行此操作

只需使用以下软件安装:

pip install django-filter
并在视图集中使用如下内容:

from django_filters.rest_framework import DjangoFilterBackend

class RadiologypdfViewSet(viewsets.ModelViewSet):
    """ViewSet for the radiology class"""

    queryset = models.Radiologypdf.objects.all()
    serializer_class = serializers.Radiologypdfserializerdata
    permission_classes = [permissions.IsAuthenticated]

    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('patientid','radiology_id')
文件摘录:

搜索行为可以通过在
搜索\u字段
前加各种字符来限制

  • “^”以搜索开始
  • “=”精确匹配
  • “@”全文搜索。(目前仅支持Django的MySQL后端。)
  • “$”正则表达式搜索
例如,将代码更改为以下内容:

`search_fields = ('=patientid','radiology_id')`

因为您已经在使用SearchFilter,所以可以在筛选字段前加“=”。在这种情况下,您的筛选字段将是:

filter_fields = ('=patientid','=radiology_id')
根据文件:

搜索行为可以通过在搜索字段前添加各种字符来限制

  • “^”以搜索开始
  • “=”精确匹配
  • “@”全文搜索。(目前仅支持Django的PostgreSQL后端。)
  • “$”正则表达式搜索