针对搜索参数的过滤器django rest框架
问题描述:
如何搜索get queryset
如果搜索参数为空或不是,所以我可以进一步自定义我的搜索,我希望它不过滤queryset
“today”,如果搜索是不是空的,有人可以解释我该怎么做?针对搜索参数的过滤器django rest框架
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]
答
之后,我跟我的朋友,我们想出了一个解决我的问题,所以我增加了对寻找新的query_params
,我们增加了一个条款的if
声明我已经准备好使用了。
附加条款是检查是否对搜索请求的query_params
/过滤可用且不是空的,所以如果是这样的话,我们不会在今天部件添加到queryset
,从而使搜索执行整个queryset
。
的解决方案是:
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
也许我误解你的问题,但'query_params'应该只是一个'dict'所以如果它不是空的,然后添加您的“今天”过滤器。 – themanatuf
是的,谢谢你的提示,我有点困惑 – PetarP