我已经设置了运行良好的 django rest 框架。我可以看到我的记录列表,或者在搜索时它也能正常工作。我想做一个改变,如果我搜索它只给我第一条记录而不是所有搜索到的记录。这是我尝试但没有工作的代码示例。请指导。谢谢
类 PhoneNumberModelViewSet(viewsets.ModelViewSet):
queryset = PhoneNumbers.objects.all()
serializer_class = PhoneNumbersSerializer
filter_backends = [SearchFilter]
search_fields = ['area_code']
我想做一个改变,如果我搜索它只给我第一条记录而不是所有搜索到的记录。这是我尝试但没有工作的代码示例。请指导。谢谢
类 PhoneNumberModelViewSet(viewsets.ModelViewSet):
queryset = PhoneNumbers.objects.all()
serializer_class = PhoneNumbersSerializer
filter_backends = [SearchFilter]
search_fields = ['area_code']
def get(self):
queryset = super().get()
area_code = self.request.query_params.get('area_code')
if area_code:
try:
queryset = queryset.filter(area_code=area_code)[0:1]
except IndexError:
queryset = PhoneNumbers.objects.none()
return queryset
尝试过滤而不是搜索,并尽量避免覆盖 get 方法。
尝试这样的事情
from rest_framework import filters
class PhoneNumberModelViewSet(viewsets.ModelViewSet):
queryset = PhoneNumbers.objects.all()
serializer_class = PhoneNumbersSerializer
filter_backends = [filters.SearchFilter, filters.OrderingFilter]
def paginate_queryset(self, queryset, request, view=None):
page_size = self.get_paginate_by(request)
if not page_size:
return None
# Check if search query is provided
search_query = self.request.query_params.get('search', None)
if search_query:
queryset = queryset.filter(area_code=search_query)[:1]
return super().paginate_queryset(queryset, request, view)
我希望这有帮助..