2017-05-08 3 views
1

Wie kann ich in der get queryset einchecken, wenn der Suchparameter leer ist oder nicht, so kann ich meine Suche weiter anpassen, ich will es nicht filtern queryset für "heute", wenn die Suche ist nicht leer, kann mir jemand erklären, wie man das macht?Filter gegen Suchparameter django Rest Framework

ModelViewSet:

from rest_framework import viewsets, permissions, filters  
from cms.restapi.pagination import StandardResultsOffsetPagination 
from cms_sales.models import LeadContact 
from cms_sales.restapi.permissions.lead_contact_permissions import LeadContactPermissions 
from cms_sales.restapi.serializers.lead_contact_serializer import LeadContactSerializer 


class LeadContactViewSet(viewsets.ModelViewSet): 
    def get_queryset(self): 
     queryset = LeadContact.objects.none() 
     user = self.request.user 
     if user.has_perm('vinclucms_sales.can_view_full_lead_contact_list'): 
      queryset = LeadContact.objects.all() 
     elif user.has_perm('vinclucms_sales.can_view_lead_contact'): 
      queryset = LeadContact.objects.filter(account_handler=user) 

     filter_date = self.request.query_params.get('filter_date', None) 

     if filter_date is not None: 
      queryset = queryset.filter(next_action_date=filter_date) 

     return queryset 

    serializer_class = LeadContactSerializer 

    filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) 

    filter_fields = ('account_handler',) 

    ordering_fields = (
     'first_name', 'last_name', 'account_handler__first_name', 'account_handler__last_name', 
     'sub_organization_name', 'organization_name', 'next_action_date', 'serial_number', 
     'status_text') 

    search_fields = (
     'first_name', 'last_name', 'account_handler__first_name', 'account_handler__last_name', 
     'sub_organization_name', 'organization_name', 'next_action_date', 'serial_number', 
     'status_text') 

    pagination_class = StandardResultsOffsetPagination 

    permission_classes = [permissions.IsAuthenticated, LeadContactPermissions] 
+0

Vielleicht ist Ihre Frage, die ich bin Missverständnis, aber 'query_params' sollte nur ein' dict' so sein, wenn er nicht leer ist, dann ist dein „heute“ Filter hinzufügen. – themanatuf

+0

ja, danke für den Hinweis, ich war ein bisschen verwirrt – PetarP

Antwort

0

Nachdem ich meinen Freund sprach, kamen wir mit einer Lösung für mein Problem, so dass ich habe ein neues query_params für die Suche und fügten wir eine andere Klausel der if Anweisung hinzugefügt dass ich alles bereit bin.

zusätzliche Klausel zu überprüfen, ob die query_params auf Antrag zur Suche/Filterung leer verfügbar und nicht den Fall, so dass, wenn das der Fall ist, dass wir den heute Teil zum queryset nicht hinzufügen, so dass die Suche durchzuführen ist über die gesamte queryset.

die Lösung ist:

filter_date = self.request.query_params.get('filter_date', None) 
search_params = self.request.query_params.get('search', None) 

if filter_date is not None and (search_params is None or len(search_params) == 0): 
    queryset = queryset.filter(next_action_date=filter_date) 

return queryset 
Verwandte Themen