Django REST 框架过滤有问题?



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

serializers.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')

您可以使用django-filter库来实现此目的。

只需安装它:

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')

摘自文档:http://www.django-rest-framework.org/api-guide/filtering/#searchfilter

可以通过在search_fields前面加上各种字符来限制搜索行为。

  • "^" 从搜索开始。
  • "="完全匹配。
  • "@"全文搜索。(目前仅支持 Django 的 MySQL 后端。
  • '$' 正则表达式搜索。

例如,将代码更改为以下内容:

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

由于您已经在使用 SearchFilter,因此您只需在筛选器字段中加上"="。在这种情况下,您的筛选器字段将是:

filter_fields = ('=patientid','=radiology_id')

根据文档:

可以通过在search_fields前面加上各种字符来限制搜索行为。

  • "^" 从搜索开始。
  • "="完全匹配。
  • "@"全文搜索。(目前仅支持 Django 的 PostgreSQL 后端。
  • '$' 正则表达式搜索。

最新更新