class CustomerFilter(django_filters.FilterSet): # start_date = DateFilter(field_name="created_at",lookup_expr='gte') ''' Date range filter # lookup_expr gives the result in which data is greater or equal to given date # gte=greater than equals--created_at is my models of Product ''' # end_date = DateFilter(field_name="created_at",lookup_expr='lte')#lte=less than equals name = CharFilter(field_name="name",lookup_expr='icontains') # --->icontains means igonring casesensitive #u--->sing this i can search even with single character class Meta: model = Customer#make filter for model Customer fields = ('name',)#generate filter form with all first_name
class UserFilter(FilterSet): fullName = CharFilter(name='full_name', method='full_name_filter') class Meta: model = Client fields = ['is_active'] def full_name_filter(self, queryset, name, value): try: first_name, last_name = value.split() return queryset.filter( (Q(first_name__icontains=first_name) & Q(last_name__icontains=last_name))).filter(is_active=True) except ValueError: first_name = value last_name = value return queryset.filter( Q(first_name__icontains=value) | Q(last_name__icontains=value)).filter(is_active=True)
class SaleFilter(SortedFilterSet): name = CharFilter( label=pgettext_lazy("Sale list filter label", "Name"), lookup_expr="icontains" ) categories = ModelMultipleChoiceFilter( label=pgettext_lazy("Sale list filter label", "Categories"), field_name="categories", queryset=Category.objects.all(), ) type = ChoiceFilter( label=pgettext_lazy("Sale list filter label", "Discount type"), choices=DISCOUNT_TYPE_CHOICES, empty_label=pgettext_lazy("Filter empty choice label", "All"), widget=forms.Select, ) value = RangeFilter(label=pgettext_lazy("Sale list filter label", "Value")) date = DateFromToRangeFilter( label=pgettext_lazy("Sale list sorting filter label", "Period of validity"), field_name="created", widget=DateRangeWidget, method=filter_by_date_range, ) sort_by = OrderingFilter( label=pgettext_lazy("Sale list filter label", "Sort by"), fields=SORT_BY_FIELDS_SALE.keys(), field_labels=SORT_BY_FIELDS_SALE, ) class Meta: model = Sale fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( "Number of matching records in the dashboard sales list", "Found %(counter)d matching sale", "Found %(counter)d matching sales", number=counter, ) % {"counter": counter}
class CustomerFilter(FilterSet): active = BooleanFilter(field_name='is_active', lookup_expr='iexact') email = CharFilter(field_name='email', lookup_expr='icontains') company = CharFilter(field_name='company', lookup_expr='icontains') first_name = CharFilter(field_name='first_name', lookup_expr='icontains') last_name = CharFilter(field_name='last_name', lookup_expr='icontains') country = CharFilter(field_name='country', lookup_expr='icontains') sales_tax_name = CharFilter(field_name='sales_tax_name', lookup_expr='icontains') sales_tax_number = CharFilter(field_name='sales_tax_number', lookup_expr='icontains') consolidated_billing = CharFilter(field_name='consolidated_billing', lookup_expr='icontains') reference = MultipleCharFilter(field_name='customer_reference', lookup_expr='iexact') class Meta: model = Customer fields = [ 'email', 'first_name', 'last_name', 'company', 'active', 'country', 'reference', 'sales_tax_name', 'consolidated_billing', 'sales_tax_number' ]
class ObjectProcessFilter(django_filters.FilterSet): src_objecthashkey = CharFilter(label='Object Source', field_name='src_objecthashkey', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control'})) dest_objecthashkey = CharFilter(label='Object Destinitions', field_name='dest_objecthashkey', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control'})) processenginehashkey = CharFilter(label='Process Engine', field_name='processenginehashkey', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control'})) userhashkey = CharFilter(label='User', field_name='userhashkey', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control'})) sourcesystemcreatedby = CharFilter(label='Created By', field_name='sourcesystemcreatedby', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control'})) sourcesystemcreatedtime = CharFilter(label='Created At', field_name='sourcesystemcreatedtime', lookup_expr='icontains', widget=forms.TextInput(attrs={'class': 'form-control'})) class Meta: model = ObjectProcess fields = '__all__' exclude = ('objectprocesshashkey') def __init__(self, *args, **kwargs): super(ObjectProcessFilter, self).__init__(*args, **kwargs)
class ProductFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Product list filter label', 'Name'), lookup_expr='icontains') categories = ModelMultipleChoiceFilter(label=pgettext_lazy( 'Product list filter label', 'Categories'), name='categories', queryset=Category.objects.all()) price = RangeFilter(label=pgettext_lazy('Product list filter label', 'Price'), name='price', widget=PriceRangeWidget) is_published = ChoiceFilter( label=pgettext_lazy('Product list filter label', 'Is published'), choices=PUBLISHED_CHOICES, empty_label=pgettext_lazy('Filter empty choice label', 'All'), widget=forms.Select) is_featured = ChoiceFilter( label=pgettext_lazy('Product list is featured filter label', 'Is featured'), choices=FEATURED_CHOICES, empty_label=pgettext_lazy('Filter empty choice label', 'All'), widget=forms.Select) sort_by = OrderingFilter(label=pgettext_lazy('Product list filter label', 'Sort by'), fields=PRODUCT_SORT_BY_FIELDS.keys(), field_labels=PRODUCT_SORT_BY_FIELDS) class Meta: model = Product fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard products list', 'Found %(counter)d matching product', 'Found %(counter)d matching products', number=counter) % { 'counter': counter }
class event(FilterSet): def __init__(self, *args, **kwargs): if not event_choices['level'] and kwargs['queryset'].count(): update_choices() super().__init__(*args, **kwargs) for attribute in event_choices: self.filters[attribute].extra.update( choices=event_choices[attribute]) self.filters[attribute].widget.attrs['size'] = min( len(event_choices[attribute]), 50) description = CharFilter(label='Description', lookup_type='icontains', widget=Textarea(attrs={ 'class': 'form-control', 'rows': 3 }), help_text='') type = MultipleChoiceFilter( label='Type', widget=SelectMultiple(attrs={'class': 'form-control'}), help_text='') level = MultipleChoiceFilter( label='Level', widget=SelectMultiple(attrs={'class': 'form-control'}), help_text='') source = MultipleChoiceFilter( label='Source', widget=SelectMultiple(attrs={'class': 'form-control'}), help_text='') success = BooleanFilter(label='Success', widget=Select(choices=(('3', 'Unknown'), ('1', 'True'), ('0', 'False')), attrs={'class': 'form-control'}), help_text='') class Meta: exclude = ('campaign', 'result', 'timestamp') model = models.event
class ClientFilter(FilterSet): name = CharFilter(name='name', method='name_filter') with_matter = BooleanFilter(name='with_matter', method="with_matter_filter") with_open_matter = BooleanFilter(name='with_open_matter', method="with_open_matter_filter") class Meta: model = Client fields = ['contact__first_name', 'matters__id'] def name_filter(self, queryset, name, value): try: first_name, last_name = value.split() return queryset.filter( Q(organisation__name__icontains=value) | (Q(contact__first_name__icontains=first_name) & Q(contact__last_name__icontains=last_name))) except ValueError: first_name = value last_name = value return queryset.filter( Q(organisation__name__icontains=value) | Q(contact__first_name__icontains=value) | Q(contact__last_name__icontains=value)) def with_matter_filter(self, queryset, name, value): if value is True: return queryset.exclude(matters=None) else: return queryset.all() def with_open_matter_filter(self, queryset, name, value): if value is True: clients = queryset.filter(matters__billable_status=1) return clients.distinct() else: return queryset.all()
class ReportFilter(DojoFilter): name = CharFilter(lookup_expr='icontains') type = MultipleChoiceFilter(choices=[]) format = MultipleChoiceFilter(choices=[]) requester = ModelMultipleChoiceFilter(queryset=Dojo_User.objects.all()) datetime = DateTimeFilter() status = MultipleChoiceFilter(choices=[]) o = OrderingFilter( # tuple-mapping retains order fields=( ('datetime', 'datetime'), ('name', 'name'), ('type', 'type'), ('format', 'format'), ('requester', 'requester'), ), field_labels={ 'datetime': 'Date', }) class Meta: model = Report exclude = ['task_id', 'file'] def __init__(self, *args, **kwargs): super(ReportFilter, self).__init__(*args, **kwargs) type = dict() type = dict([report.type, report.type] for report in self.queryset.distinct() if report.type is not None) type = collections.OrderedDict(sorted(type.items())) self.form.fields['type'].choices = type.items() status = dict() status = dict([report.status, report.status] for report in self.queryset.distinct() if report.status is not None) status = collections.OrderedDict(sorted(status.items())) self.form.fields['status'].choices = status.items()
class VoucherFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Voucher list name filter label', 'Name'), lookup_expr='icontains') type = ChoiceFilter(field_name='discount_value_type', label=pgettext_lazy( 'Sale list is sale type filter label', 'Discount type'), choices=DISCOUNT_TYPE_CHOICES, empty_label=pgettext_lazy('Filter empty choice label', 'All'), widget=forms.Select) discount_value = RangeFilter( label=pgettext_lazy('Sale list filter label', 'Discount_value')) date = DateFromToRangeFilter(label=pgettext_lazy( 'Voucher list sorting filter label', 'Period of validity'), field_name='created', widget=DateRangeWidget, method=filter_by_date_range) min_amount_spent = RangeFilter(label=pgettext_lazy( 'Voucher list sorting filter', 'Minimum amount spent'), field_name='min_amount_spent') sort_by = OrderingFilter(label=pgettext_lazy( 'Voucher list sorting filter label', 'Sort by'), fields=SORT_BY_FIELDS_LABELS_VOUCHER.keys(), field_labels=SORT_BY_FIELDS_LABELS_VOUCHER) class Meta: model = Voucher fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard vouchers list', 'Found %(counter)d matching voucher', 'Found %(counter)d matching vouchers', number=counter) % { 'counter': counter }
class VM_PORF_CXC_Filter(filters.FilterSet): cuenta_desc = CharFilter(name="cuenta_desc", lookup_expr="contains") doc_fecha_lm_ini = DateFilter(name="doc_fecha_lm", lookup_expr="gte") doc_fecha_lm_fin = DateFilter(name="doc_fecha_lm", lookup_expr="lte") class Meta: model = VM_PORF_CXC fields = [ 'doc_compania', 'anio', 'periodo', 'doc_tipo', 'doc_numero', 'doc_fecha_lm_ini', 'doc_fecha_lm_fin', 'un_proyecto', 'un', 'cuenta_desc', 'cuenta_clase', 'cuenta_porf_clase', ]
class PopularCategoryFilter(SortedFilterSet): category__name = CharFilter(label=pgettext_lazy( 'Category list filter label', 'Name'), lookup_expr='icontains') sort_by = OrderingFilter(label=pgettext_lazy('Category list filter label', 'Sort by'), fields=SORT_BY_FIELDS.keys(), field_labels=SORT_BY_FIELDS) class Meta: model = PopularCategory fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard popular categories list', 'Found %(counter)d matching popular category', 'Found %(counter)d matching popular categories', number=counter) % { 'counter': counter }
class OrgsMediaFilter(django_filters.FilterSet): title = CharFilter(field_name="title", lookup_expr='icontains', label=_('كلمات من عنوان المحتوى')) start_date_pub = DateFilter(field_name="created_at", lookup_expr='gte', label=_('تاريخ نشر المحتوى / من :')) end_date_pub = DateFilter(field_name="created_at", lookup_expr='lte', label=_('إلى :')) class Meta: model = OrgData fields = [ 'user', 'org_name', 'title', 'start_date_pub', 'end_date_pub', ]
class SaleFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Sale list filter label', 'Name'), lookup_expr='icontains') categories = ModelMultipleChoiceFilter(label=pgettext_lazy( 'Sale list filter label', 'Categories'), name='categories', queryset=Category.objects.all()) type = ChoiceFilter(label=pgettext_lazy('Sale list filter label', 'Discount type'), choices=DISCOUNT_TYPE_CHOICES, empty_label=pgettext_lazy('Filter empty choice label', 'All'), widget=forms.Select) value = RangeFilter(label=pgettext_lazy('Sale list filter label', 'Value')) sort_by = OrderingFilter(label=pgettext_lazy('Sale list filter label', 'Sort by'), fields=SORT_BY_FIELDS_SALE.keys(), field_labels=SORT_BY_FIELDS_SALE) class Meta: model = Sale fields = []
class CollectionExtensionFilter(SortedFilterSet): collection__name = CharFilter(label=pgettext_lazy( 'Collection list filter label', 'Name'), lookup_expr='icontains') sort_by = OrderingFilter(label=pgettext_lazy( 'Collection list filter label', 'Sort by'), fields=SORT_BY_FIELDS.keys(), field_labels=SORT_BY_FIELDS) class Meta: model = CollectionExtension fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard collection extensions list', 'Found %(counter)d matching collection extension', 'Found %(counter)d matching collection extensions', number=counter) % { 'counter': counter }
class GoodsFilter(filters.FilterSet): # 初始化过滤对象,对goods的价格小于等于或大于等于过滤 pricemin = NumberFilter(field_name='shop_price', lookup_expr='gte') pricemax = NumberFilter(field_name='shop_price', lookup_expr='lte') # SQL的搜索过滤 name = CharFilter(field_name='name', lookup_expr='icontains') # 根据一级类别的id过滤出属于一级类别的所有的商品 top_category = NumberFilter(method='top_catetory_filter') def top_catetory_filter(self, queryset, name, value): # 这里的queryset返回的是Goods的实例列表,过滤商品类别等于value的实例或者商品类别的父类别等于value的实例或者商品类别的爷爷类别等于value的实例 # 这里category、parent_category都是外键,那么要获取外键的ID,直接在后面加上_id即可获取 # 这里主要逻辑的实现是基于Goods这个Model有一个外键category属于GoodCategory这个Model, 这样就可以使用获取一个商品后,找到其一级类别,最后根据过滤规则判断是否这个一级类别的值等于value, 如果等于,那么这个商品将会保留下来 queryset = queryset.filter(Q(category_id = value) | \ Q(category__parent_category_id = value) | \ Q(category__parent_category__parent_category_id = value)) return queryset class Meta: model = Goods fields = ['pricemin', 'pricemax', 'name', 'is_hot', 'is_new']
class LinkedProductFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Linked product list filter label', 'Name'), lookup_expr='icontains') sort_by = OrderingFilter(label=pgettext_lazy( 'Linked product list filter label', 'Sort by'), fields=SORT_BY_FIELDS.keys(), field_labels=SORT_BY_FIELDS) class Meta: model = LinkedProduct fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard linked products list', 'Found %(counter)d matching linked product', 'Found %(counter)d matching linked products', number=counter) % { 'counter': counter }
class SkillFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Skill list filter label', 'Name'), lookup_expr='icontains') category = ModelMultipleChoiceFilter(label=pgettext_lazy( 'Skill list filter label', 'Category'), field_name='category', queryset=Category.objects.all()) skill_type = ModelMultipleChoiceFilter(label=pgettext_lazy( 'Skill list filter label', 'Skill type'), field_name='skill_type', queryset=SkillType.objects.all()) price = RangeFilter(label=pgettext_lazy('Skill list filter label', 'Price'), field_name='price', widget=MoneyRangeWidget) is_published = ChoiceFilter(label=pgettext_lazy('Skill list filter label', 'Is published'), choices=PUBLISHED_CHOICES, empty_label=pgettext_lazy( 'Filter empty choice label', 'All'), widget=forms.Select) sort_by = OrderingFilter(label=pgettext_lazy('Skill list filter label', 'Sort by'), fields=SKILL_SORT_BY_FIELDS.keys(), field_labels=SKILL_SORT_BY_FIELDS) class Meta: model = Skill fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard skills list', 'Found %(counter)d matching skill', 'Found %(counter)d matching skills', number=counter) % { 'counter': counter }
class MenuFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Menu list filter label', 'Menu name'), lookup_expr='icontains') sort_by = OrderingFilter(label=pgettext_lazy('Menu list filter label', 'Sort by'), fields=MENU_SORT_BY_FIELDS.keys(), field_labels=MENU_SORT_BY_FIELDS) class Meta: model = Menu fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard menus list', 'Found %(counter)d matching menu', 'Found %(counter)d matching menus', number=counter) % { 'counter': counter }
class ColumnFilter(FilterSet): database = ModelChoiceFilter(queryset=Database.objects.filter(enable=True), method='database_filter', label='', empty_label='Choose a database') table = ModelChoiceFilter(queryset=Table.objects.all(), label='') word = CharFilter(method='word_filter', label='', widget=TextInput(attrs={'placeholder': 'Search a word'})) def database_filter(self, queryset, name, value): return queryset.filter(table__database=value) def word_filter(self, queryset, name, value): return queryset.filter( Q(name__icontains=value) | Q(comment__icontains=value) | Q(table__name__icontains=value) | Q(table__comment__icontains=value)) class Meta: model = Column fields = ['database', 'table', 'word']
class ReleaseComponentFilter(ComposeFilterSet): name = MultiValueFilter() release = MultiValueFilter(name='release__release_id') global_component = MultiValueFilter(name='global_component__name') bugzilla_component = MultiValueFilter(name='bugzilla_component__name') brew_package = MultiValueFilter() active = CaseInsensitiveBooleanFilter() type = CharFilter(name='type__name') dist_git_branch = MethodFilter(action='filter_by_dist_git_branch', widget=SelectMultiple) @value_is_not_empty def filter_by_dist_git_branch(self, qs, value): q = Q(dist_git_branch__in=value) | Q( release__releasedistgitmapping__dist_git_branch__in=value, dist_git_branch__isnull=True) return qs.filter(q) class Meta: model = ReleaseComponent fields = ('name', 'release', 'global_component', 'active', 'bugzilla_component', 'type', 'dist_git_branch')
class OrgsRapportFilter(django_filters.FilterSet): title = CharFilter(field_name="title", lookup_expr='icontains', label=_('كلمات من عنوان التقرير')) start_date_pub = DateFilter(field_name="created_at", lookup_expr='gte', label=_('تاريخ نشر التقرير / من :')) end_date_pub = DateFilter(field_name="created_at", lookup_expr='lte', label=_('إلى :')) class Meta: model = OrgRapport fields = [ 'org_name', 'title', 'domain', 'start_date_pub', 'end_date_pub', ]
class Meta: _list_fields = ( 'id', 'some_binfile', 'some_namedbinfile', 'some_namedbinimage', 'some_multiplenamedbinfile', 'some_multiplenamedbinimage', ) _override_list_fields = dict( some_binfile=fields.BinFileInStringField(required=False), some_namedbinfile=fields.NamedBinaryFileInJsonField( required=False), some_namedbinimage=fields.NamedBinaryImageInJsonField( required=False), some_multiplenamedbinfile=fields. MultipleNamedBinaryFileInJsonField(required=False), some_multiplenamedbinimage=fields. MultipleNamedBinaryImageInJsonField(required=False)) _filterset_fields = { 'some_binfile': CharFilter(label='Some label for binfile') }
class BillingDocumentFilter(FilterSet): state = CharFilter(name='state', lookup_type='iexact') number = NumberFilter(name='number', lookup_type='iexact') customer_name = CharFilter(name='customer__name', lookup_type='icontains') customer_company = CharFilter(name='customer__company', lookup_type='icontains') provider_name = CharFilter(name='provider__name', lookup_type='icontains') provider_company = CharFilter(name='provider__company', lookup_type='icontains') issue_date = DateFilter(name='issue_date', lookup_type='iexact') due_date = DateFilter(name='due_date', lookup_type='iexact') paid_date = DateFilter(name='due_date', lookup_type='iexact') cancel_date = DateFilter(name='cancel_date', lookup_type='iexact') currency = CharFilter(name='currency', lookup_type='icontains') sales_tax_name = CharFilter(name='sales_tax_name', lookup_type='icontains') class Meta: fields = ['state', 'number', 'customer_name', 'customer_company', 'issue_date', 'due_date', 'paid_date', 'cancel_date', 'currency', 'sales_tax_name']
class IncidentFilter(django_filters.FilterSet): categories = Category.objects.all() subcategories = Subcategory.objects.all() statuses = Incident.INCIDENT_STATUSES name = CharFilter(lookup_expr='icontains', label='Название') status = ChoiceFilter(choices=statuses, label='Статус') category = ModelChoiceFilter(queryset=categories, label='Категория') subcategory = ModelChoiceFilter(queryset=subcategories, label='Причина') loss_amount__gt = NumberFilter(field_name='loss_amount', lookup_expr='gt', label='Убыток больше чем...') loss_amount__lt = NumberFilter(field_name='loss_amount', lookup_expr='lt', label='Убыток меньше чем...') incident_year = NumberFilter(field_name='incident_date', lookup_expr='year', label='Год инцидента') class Meta: model = Incident fields = ['id', 'status', 'name', 'category', 'subcategory']
class ProductTypeFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Product type list filter label', 'Name'), lookup_expr='icontains') sort_by = OrderingFilter(label=pgettext_lazy( 'Product type list filter label', 'Sort by'), fields=PRODUCT_TYPE_SORT_BY_FIELDS.keys(), field_labels=PRODUCT_TYPE_SORT_BY_FIELDS) class Meta: model = ProductType fields = ['name', 'product_attributes', 'variant_attributes'] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard product types list', 'Found %(counter)d matching product type', 'Found %(counter)d matching product types', number=counter) % { 'counter': counter }
class ImageFilter(SortedFilterSet): name = CharFilter(label=pgettext_lazy('Image list filter label', 'Name'), lookup_expr='icontains') sort_by = OrderingFilter(label=pgettext_lazy('Image list filter label', 'Sort by'), fields=IMAGE_SORT_BY_FIELDS.keys(), field_labels=IMAGE_SORT_BY_FIELDS) class Meta: model = ImageData fields = [] def get_summary_message(self): counter = self.qs.count() return npgettext( 'Number of matching records in the dashboard ' 'image list', 'Found %(counter)d matching attribute', 'Found %(counter)d matching attributes', number=counter) % { 'counter': counter }
class ProductFilter(django_filters.FilterSet): # start_date = DateFilter(field_name="created_at",lookup_expr='gte') ''' Date range filter # lookup_expr gives the result in which data is greater or equal to given date # gte=greater than equals--created_at is my models of Product ''' # end_date = DateFilter(field_name="created_at",lookup_expr='lte')#lte=less than equals # name = django_filters.DateFilter(widget=DateInput(attrs={'class':'datepicker','placeholder':'Search for ...'})) name = CharFilter(field_name="name", lookup_expr='icontains') # --->icontains means igonring casesensitive #u--->sing this i can search even with single character class Meta: model = Product #make filter for model Product fields = '__all__' #generate filter form with all models exclude = ['created_at', 'description', 'category', 'price']
class CollectionFilter(filters.FilterSet): """ Provides filtering functionality for collections requests """ material_id = CharFilter(method="filter_by_material_id") @staticmethod def filter_by_material_id(qs, name, value): """ Filters collections which contain material :param qs: queryset instance :param name: query parameter name :param value: query parameter value (external id of material) :return: updated queryset """ return qs.filter(materials__external_id=value) class Meta: model = Collection fields = ('material_id', 'publish_status',)
class OrderFilter(SortedFilterSet): id = NumberFilter(label=pgettext_lazy('Order list filter label', 'ID')) name_or_email = CharFilter(label=pgettext_lazy('Order list filter label', 'Customer name or email'), method='filter_by_order_customer') created = DateFromToRangeFilter(label=pgettext_lazy( 'Order list filter label', 'Placed on'), name='created', widget=DateRangeWidget) status = ChoiceFilter(label=pgettext_lazy('Order list filter label', 'Order status'), choices=OrderStatus.CHOICES, empty_label=pgettext_lazy( 'Filter empty choice label', 'All'), widget=forms.Select) payment_status = ChoiceFilter( label=pgettext_lazy('Order list filter label', 'Payment status'), name='payments__status', choices=PaymentStatus.CHOICES, empty_label=pgettext_lazy('Filter empty choice label', 'All'), widget=forms.Select) total_net = RangeFilter(label=pgettext_lazy('Order list filter label', 'Total'), widget=PriceRangeWidget) sort_by = OrderingFilter(label=pgettext_lazy('Order list filter label', 'Sort by'), fields=SORT_BY_FIELDS, field_labels=SORT_BY_FIELDS_LABELS) class Meta: model = Order fields = [] def filter_by_order_customer(self, queryset, name, value): return queryset.filter( Q(user__email__icontains=value) | Q(user__default_billing_address__first_name__icontains=value) | Q(user__default_billing_address__last_name__icontains=value))