class AttributeFilter(django_filters.FilterSet): # Search by attribute name and slug search = django_filters.CharFilter( method=filter_fields_containing_value("slug", "name") ) ids = GlobalIDMultipleChoiceFilter(field_name="id") in_collection = GlobalIDFilter(method="filter_in_collection") in_category = GlobalIDFilter(method="filter_in_category") class Meta: model = Attribute fields = [ "value_required", "is_variant_only", "visible_in_storefront", "filterable_in_storefront", "filterable_in_dashboard", "available_in_grid", ] def filter_in_collection(self, queryset, name, value): requestor = get_user_or_app_from_context(self.request) return filter_attributes_by_product_types(queryset, name, value, requestor) def filter_in_category(self, queryset, name, value): requestor = get_user_or_app_from_context(self.request) return filter_attributes_by_product_types(queryset, name, value, requestor)
class ProductFilter(django_filters.FilterSet): is_published = django_filters.BooleanFilter() collections = GlobalIDMultipleChoiceFilter(method=filter_collections) categories = GlobalIDMultipleChoiceFilter(method=filter_categories) has_category = django_filters.BooleanFilter(method=filter_has_category) price = ObjectTypeFilter( input_class=PriceRangeInput, method=filter_price, field_name="price_amount" ) minimal_price = ObjectTypeFilter( input_class=PriceRangeInput, method=filter_minimal_price, field_name="minimal_price_amount", ) attributes = ListObjectTypeFilter( input_class=AttributeInput, method=filter_attributes ) stock_availability = EnumFilter( input_class=StockAvailability, method=filter_stock_availability ) product_type = GlobalIDFilter() search = django_filters.CharFilter(method=filter_search) class Meta: model = Product fields = [ "is_published", "collections", "categories", "has_category", "price", "attributes", "stock_availability", "product_type", "search", ]
class ProductFilter(MetadataFilterBase): is_published = django_filters.BooleanFilter(method="filter_is_published") collections = GlobalIDMultipleChoiceFilter(method=filter_collections) categories = GlobalIDMultipleChoiceFilter(method=filter_categories) has_category = django_filters.BooleanFilter(method=filter_has_category) price = ObjectTypeFilter(input_class=PriceRangeInput, method="filter_variant_price") minimal_price = ObjectTypeFilter( input_class=PriceRangeInput, method="filter_minimal_price", field_name="minimal_price_amount", ) attributes = ListObjectTypeFilter( input_class="saleor.graphql.attribute.types.AttributeInput", method="filter_attributes", ) stock_availability = EnumFilter(input_class=StockAvailability, method="filter_stock_availability") product_type = GlobalIDFilter() # Deprecated product_types = GlobalIDMultipleChoiceFilter(field_name="product_type") stocks = ObjectTypeFilter(input_class=ProductStockFilterInput, method=filter_stocks) search = django_filters.CharFilter(method=filter_search) ids = GlobalIDMultipleChoiceFilter(field_name="id") class Meta: model = Product fields = [ "is_published", "collections", "categories", "has_category", "attributes", "stock_availability", "product_type", "stocks", "search", ] def filter_attributes(self, queryset, name, value): return _filter_attributes(queryset, name, value) def filter_variant_price(self, queryset, name, value): channel_slug = get_channel_slug_from_filter_data(self.data) return _filter_variant_price(queryset, name, value, channel_slug) def filter_minimal_price(self, queryset, name, value): channel_slug = get_channel_slug_from_filter_data(self.data) return _filter_minimal_price(queryset, name, value, channel_slug) def filter_is_published(self, queryset, name, value): channel_slug = get_channel_slug_from_filter_data(self.data) return _filter_is_published(queryset, name, value, channel_slug) def filter_stock_availability(self, queryset, name, value): channel_slug = get_channel_slug_from_filter_data(self.data) return _filter_stock_availability(queryset, name, value, channel_slug)
class AttributeFilter(django_filters.FilterSet): # Search by attribute name and slug search = django_filters.CharFilter( method=filter_fields_containing_value("slug", "name")) ids = GlobalIDMultipleChoiceFilter(field_name="id") in_collection = GlobalIDFilter(method=filter_attributes_by_product_types) in_category = GlobalIDFilter(method=filter_attributes_by_product_types) class Meta: model = Attribute fields = [ "value_required", "is_variant_only", "visible_in_storefront", "filterable_in_storefront", "filterable_in_dashboard", "available_in_grid", ]
class ProductFilter(django_filters.FilterSet): is_published = django_filters.BooleanFilter() collections = GlobalIDMultipleChoiceFilter(method=filter_collections) categories = GlobalIDMultipleChoiceFilter(method=filter_categories) has_category = django_filters.BooleanFilter(method=filter_has_category) price = ObjectTypeFilter(input_class=PriceRangeInput, method=filter_variant_price) minimal_price = ObjectTypeFilter( input_class=PriceRangeInput, method=filter_minimal_price, field_name="minimal_price_amount", ) attributes = ListObjectTypeFilter( input_class="saleor.graphql.product.types.attributes.AttributeInput", method=filter_attributes, ) stock_availability = EnumFilter(input_class=StockAvailability, method=filter_stock_availability) product_type = GlobalIDFilter() # Deprecated product_types = GlobalIDMultipleChoiceFilter(field_name="product_type") stocks = ObjectTypeFilter(input_class=ProductStockFilterInput, method=filter_stocks) search = django_filters.CharFilter(method=filter_search) ids = GlobalIDMultipleChoiceFilter(field_name="id") allegro_status = django_filters.CharFilter(method=filter_allegro_status) updated_at = ObjectTypeFilter(input_class=DateRangeInput, method=filter_updated_at_range) created_at = ObjectTypeFilter(input_class=DateRangeInput, method=filter_created_at_range) warehouse_location = ObjectTypeFilter( input_class=WarehouseLocationRangeInput, method=filter_warehouse_location) class Meta: model = Product fields = [ "is_published", "collections", "categories", "has_category", "attributes", "stock_availability", "product_type", "stocks", "search", "allegro_status", "updated_at", "created_at", "warehouse_location", ]
class DonationMessageFilter(django_filters.FilterSet): nonprofit = GlobalIDFilter(method='filter_nonprofit') random = django_filters.BooleanFilter(method='filter_random') class Meta: model = models.DonationMessage fields = [] def filter_random(self, qs, name, value): return qs.order_by('?') def filter_nonprofit(self, qs, name, value): return qs.annotate(nonprofit_id=Value( from_global_id(value)[1], output_field=PositiveIntegerField(), ))
class CategoryFilter(django_filters.FilterSet): search = django_filters.CharFilter( method=filter_fields_containing_value("slug", "name")) ids = GlobalIDMultipleChoiceFilter(field_name="id") parent = GlobalIDFilter() # used in sales sales = GlobalIDMultipleChoiceFilter(method=filter_sales) not_in_sales = GlobalIDMultipleChoiceFilter(method=filter_not_in_sales) # used in vouchers vouchers = GlobalIDMultipleChoiceFilter(method=filter_vouchers) not_in_vouchers = GlobalIDMultipleChoiceFilter( method=filter_not_in_vouchers) class Meta: model = Category fields = ["search", "parent"]
class ProductFilter(django_filters.FilterSet): is_published = django_filters.BooleanFilter() collections = GlobalIDMultipleChoiceFilter(method=filter_collections) categories = GlobalIDMultipleChoiceFilter(method=filter_categories) price = ObjectTypeFilter(input_class=PriceRangeInput, method=filter_price) attributes = ListObjectTypeFilter(input_class=AttributeInput, method=filter_attributes) stock_availability = EnumFilter(input_class=StockAvailability, method=filter_stock_availability) product_type = GlobalIDFilter() search = django_filters.CharFilter(method=filter_search) class Meta: model = Product fields = [ 'is_published', 'collections', 'categories', 'price', 'attributes', 'stock_availability', 'product_type', 'search' ]