我在使用 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 后端。
- '$' 正则表达式搜索。