class EmployeeFilter(filterset.FilterSet): start_salary = filterset.NumberFilter(field_name='salary', lookup_expr='gte') end_salary = filterset.NumberFilter(field_name='salary', lookup_expr='lte') salary_in = NumberInFilter(field_name='salary', lookup_expr='in') class Meta: model = models.Employee fields = ['start_salary', 'end_salary', 'salary_in']
class EstateFilterSet(filterset.FilterSet): """自定义楼盘筛选器""" name = filterset.CharFilter(lookup_expr='contains') minhot = filterset.NumberFilter(field_name='hot', lookup_expr='gte') maxhot = filterset.NumberFilter(field_name='hot', lookup_expr='lte') dist = filterset.NumberFilter(field_name='district') class Meta: model = Estate fields = ('name', 'minhot', 'maxhot', 'dist')
class CarShopFilterSet(filterset.FilterSet): """自定义店铺筛选器""" name = filterset.CharFilter(lookup_expr='startswith') minhot = filterset.NumberFilter(field_name='hot', lookup_expr='gte') maxhot = filterset.NumberFilter(field_name='hot', lookup_expr='lte') dist = filterset.NumberFilter(field_name='district') class Meta: model = CarShop fields = ('name', 'minhot', 'maxhot', 'dist')
class EstateFilterSet(filterset.FilterSet): """重写父类方法,自定义筛选方式""" name = filterset.CharFilter(lookup_expr='startswith') minhot = filterset.NumberFilter(field_name='hot', lookup_expr='gte') maxhot = filterset.NumberFilter(field_name='hot', lookup_expr='lte') dist = filterset.NumberFilter(field_name='district') class Meta: # 指定哪一个模型做筛选 model = Estate # 指定根据哪些字段搜索 fields = ('name', 'minhot', 'maxhot', 'dist')
class HouseInfoFilter(filterset.FilterSet): """房屋过滤类""" min_price = filterset.NumberFilter(field_name='price', lookup_expr='gte') max_price = filterset.NumberFilter(field_name='price', lookup_expr='lte') area = filterset.CharFilter(method='filter_by_area') @staticmethod def filter_by_area(queryset, name, value): return queryset.filter( Q(county__startswith=value) | Q(street__startswith=value) | Q(xiaoqu__startswith=value)) class Meta: model = HouseInfo fields = ('min_price', 'max_price', 'county')
class EmployeeFilter(filterset.FilterSet): name = filterset.CharFilter(lookup_expr=LIKE) gender = filterset.CharFilter(lookup_expr=LIKE) department = filterset.CharFilter(field_name='department__name', lookup_expr=LIKE) district = filterset.CharFilter(field_name='district__name', lookup_expr=LIKE) marital_status = filterset.CharFilter(field_name='marital_status__name', lookup_expr=LIKE) start_salary = filterset.NumberFilter(field_name='salary', lookup_expr='gte') end_salary = filterset.NumberFilter(field_name='salary', lookup_expr='lte') salary_in = NumberInFilter(field_name='salary', lookup_expr='in') class Meta: model = models.Employee fields = [ 'name', 'gender', 'department', 'district', 'marital_status', 'start_salary', 'end_salary', 'salary_in' ]
class HouseInfoFilterSet(filterset.FilterSet): """自定义房源筛选器""" title = filterset.CharFilter(lookup_expr='contains') minprice = filterset.NumberFilter(field_name='price', lookup_expr='gte') maxprice = filterset.NumberFilter(field_name='price', lookup_expr='lte') minarea = filterset.NumberFilter(field_name='area', lookup_expr='gte') maxarea = filterset.NumberFilter(field_name='area', lookup_expr='lte') district = filterset.NumberFilter(method='filter_by_district') @staticmethod def filter_by_district(queryset, name, value): return queryset.filter(Q(district_level2=value) | Q(district_level3=value)) class Meta: model = HouseInfo fields = ('title', 'minprice', 'maxprice', 'minarea', 'maxarea', 'type', 'district')
class MeansPaymentFilter(filterset.FilterSet): description = filterset.CharFilter(lookup_expr='icontains') active = filterset.BooleanFilter(widget=BooleanWidget) year = filterset.NumberFilter(field_name='created_at', lookup_expr='date__year') class Meta: model = models.MeansPayment fields = ['description', 'active', 'year']
class SaleFilterSet(filterset.FilterSet): year = filterset.NumberFilter( lookup_expr='year__exact', field_name='date' ) class Meta: model = models.Sale fields = ['year']
class DepartmentFilter(filterset.FilterSet): user_not_in = filterset.NumberFilter(method='filter_user_not_in') def filter_user_not_in(self, queryset: QuerySet, name, value): return queryset.prefetch_related( Prefetch('users', queryset=models.User.objects.exclude(pk=value)) ) class Meta: model = models.Department fields = ['user_not_in']
class ProductFilter(filterset.FilterSet): name_or_detail_description = filterset.CharFilter( method='filter_name_or_detail_description') active = filterset.BooleanFilter(widget=BooleanWidget) price_start = filterset.NumberFilter(field_name='sale_price', lookup_expr='gte') price_end = filterset.NumberFilter(field_name='sale_price', lookup_expr='lte') sale_price = NumberInFilter(lookup_expr='in') id = NumberInFilter(lookup_expr='in') @staticmethod def filter_name_or_detail_description(queryset, name, value): return queryset.filter( Q(name__icontains=value) | Q(detail_description__icontains=value)) class Meta: model = models.Product fields = [ 'active', 'price_start', 'price_end', 'sale_price', 'name_or_detail_description', 'id' ]
class HouseInfoFilter(filterset.FilterSet): """房屋过滤类""" minprice = filterset.NumberFilter(field_name='price', lookup_expr='gte') maxprice = filterset.NumberFilter(field_name='price', lookup_expr='lte') minarea = filterset.NumberFilter(field_name='area', lookup_expr='gte') maxarea = filterset.NumberFilter(field_name='area', lookup_expr='lte') minmetro = filterset.NumberFilter(field_name='metro', lookup_expr='gte') maxmetro = filterset.NumberFilter(field_name='metro', lookup_expr='lte') area = filterset.CharFilter(method='filter_by_area') @staticmethod def filter_by_area(queryset, name, value): return queryset.filter( Q(city__startswith=value) | Q(county__startswith=value) | Q(street__startswith=value) | Q(comm_name__startswith=value) | Q(house_style__startswith=value)) class Meta: model = HouseInfo fields = ('minmetro', 'maxmetro', 'minprice', 'maxprice', 'minarea', 'maxarea', 'area')
class ChatMessageFilter(filterset.FilterSet): chat = filterset.NumberFilter(lookup_expr=FILTER_EQUALS) class Meta: model = models.ChatMessage fields = ['chat']