multiply filters for employee

This commit is contained in:
alex 2020-01-23 13:54:36 +03:00
parent a6f3384126
commit e5faa90c76
3 changed files with 27 additions and 17 deletions

View File

@ -1,7 +1,8 @@
"""Establishment app filters."""
from django.core.validators import EMPTY_VALUES
from django.utils.translation import ugettext_lazy as _
from django_filters import rest_framework as filters
from django_filters import rest_framework as filters, Filter
from django_filters.fields import Lookup
from rest_framework.serializers import ValidationError
from establishment import models
@ -63,13 +64,19 @@ class EstablishmentTypeTagFilter(filters.FilterSet):
)
class ListFilter(Filter):
def filter(self, qs, value):
value_list = value.split(u',')
return super().filter(qs, Lookup(value_list, 'in'))
class EmployeeBackFilter(filters.FilterSet):
"""Employee filter set."""
search = filters.CharFilter(method='search_by_name_or_last_name')
position_id = filters.NumberFilter(method='search_by_actual_position_id')
public_mark = filters.NumberFilter(method='search_by_public_mark')
toque_number = filters.NumberFilter(method='search_by_toque_number')
position_id = filters.CharFilter(method='search_by_actual_position_id')
public_mark = filters.CharFilter(method='search_by_public_mark')
toque_number = filters.CharFilter(method='search_by_toque_number')
username = filters.CharFilter(method='search_by_username_or_name')
class Meta:
@ -93,19 +100,22 @@ class EmployeeBackFilter(filters.FilterSet):
def search_by_actual_position_id(self, queryset, name, value):
"""Search by actual position_id."""
if value not in EMPTY_VALUES:
return queryset.search_by_position_id(value)
value_list = [int(val) for val in value.split(',')]
return queryset.search_by_position_id(value_list)
return queryset
def search_by_public_mark(self, queryset, name, value):
"""Search by establishment public_mark."""
if value not in EMPTY_VALUES:
return queryset.search_by_public_mark(value)
value_list = [int(val) for val in value.split(',')]
return queryset.search_by_public_mark(value_list)
return queryset
def search_by_toque_number(self, queryset, name, value):
"""Search by establishment toque_number."""
if value not in EMPTY_VALUES:
return queryset.search_by_toque_number(value)
value_list = [int(val) for val in value.split(',')]
return queryset.search_by_toque_number(value_list)
return queryset
def search_by_username_or_name(self, queryset, name, value):

View File

@ -1034,22 +1034,22 @@ class EmployeeQuerySet(models.QuerySet):
Q(establishmentemployee__to_date__isnull=True)
)
def search_by_position_id(self, value):
def search_by_position_id(self, value_list):
"""Search by position_id."""
return self.filter(
Q(establishmentemployee__position_id=value),
return self.search_by_actual_employee().filter(
Q(establishmentemployee__position_id__in=value_list),
)
def search_by_public_mark(self, value):
def search_by_public_mark(self, value_list):
"""Search by establishment public_mark."""
return self.filter(
Q(establishmentemployee__establishment__public_mark=value),
return self.search_by_actual_employee().filter(
Q(establishmentemployee__establishment__public_mark__in=value_list),
)
def search_by_toque_number(self, value):
def search_by_toque_number(self, value_list):
"""Search by establishment toque_number."""
return self.filter(
Q(establishmentemployee__establishment__toque_number=value),
return self.search_by_actual_employee().filter(
Q(establishmentemployee__establishment__toque_number__in=value_list),
)
def search_by_username_or_name(self, value):

View File

@ -187,7 +187,7 @@ class EmployeeListCreateView(generics.ListCreateAPIView):
permission_classes = (permissions.AllowAny,)
filter_class = filters.EmployeeBackFilter
serializer_class = serializers.EmployeeBackSerializers
queryset = models.Employee.objects.all().with_back_office_related()
queryset = models.Employee.objects.all().distinct().with_back_office_related()
class EmployeesListSearchViews(generics.ListAPIView):