Фильтры Django REST Framework внутри функции GET? - PullRequest
0 голосов
/ 14 мая 2018

Можно ли использовать фильтры REST Django внутри созданной мной функции GET?

Это работает, когда я использую это:

class ContactListView(generics.ListAPIView):
    queryset = Profile.objects.all()
    serializer_class = UserContactListSerializer
    filter_backends = (filters.SearchFilter,)
    search_fields = ('name', 'last_name',)

Но я хочу, чтобы она работала в созданной мной функции GET :

def get(self, request, pk, format=None):
    contacts = Profile.objects.get(pk=pk)
    serializer = UserContactListSerializer(contacts)
    filter_backends = (filters.SearchFilter,)
    search_fields = ('name', 'last_name',)
    return Response(serializer.data)

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

В функции get View является экземпляром. Таким образом, filter_backends является свойством этого экземпляра. Вы должны обновить свойство объекта и вызвать функцию filter_queryset. «filter_backends» будет использоваться в этой функции .:

def get(self, request, pk, format=None):
    self.filter_backends = (filters.SearchFilter,)
    self.search_fields = ('name', 'last_name',)
    queryset = self.filter_queryset(self.get_queryset()) 
    serializer = self.get_serializer(queryset, many=True)  
    return Response(serializer.data)
0 голосов
/ 14 мая 2018

Внутри функции Get ...

Скажем, у вас был такой URL, как mywebsite.com/mypage/?search=[searchterm]

тогда в вашей функции GET используйте это:

def get(self, request):
    filterurl = self.request.query_params.get('search', None)
    contacts = Profile.objects.all()
    if filterurl is not None:
        contacts = Profile.objects.filter([fieldname]=filterurl)
    return Response(contacts)
...