搜索 Django rest framework 而不是显示所有记录时,我只想要第一条记录

问题描述 投票:0回答:1

我已经设置了运行良好的 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
django api rest frameworks
1个回答
0
投票

尝试过滤而不是搜索,并尽量避免覆盖 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)

我希望这有帮助..

© www.soinside.com 2019 - 2024. All rights reserved.