diff --git a/core/admin.py b/core/admin.py index d22da5a6..63710aa7 100644 --- a/core/admin.py +++ b/core/admin.py @@ -204,7 +204,7 @@ class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ readonly_fields = ("uuid", "modified", "created") autocomplete_fields = ["categories", "group"] - general_fields = ["is_active", "name", "value_type"] + general_fields = ["is_active", "name", "value_type", "is_filterable"] relation_fields = ["group", "categories"] diff --git a/core/graphene/object_types.py b/core/graphene/object_types.py index 0eb82416..36b57be7 100644 --- a/core/graphene/object_types.py +++ b/core/graphene/object_types.py @@ -250,7 +250,7 @@ class CategoryType(DjangoObjectType): ): distinct_vals = ( AttributeValue.objects.annotate(value_length=Length("value")) - .filter(attribute=attr, product__category=self, value_length__lte=30) + .filter(attribute=attr, attribute__is_filterable=True, product__category=self, value_length__lte=30) .values_list("value", flat=True) .distinct() ) diff --git a/core/migrations/0043_attribute_is_filterable_and_more.py b/core/migrations/0043_attribute_is_filterable_and_more.py new file mode 100644 index 00000000..cac31e0c --- /dev/null +++ b/core/migrations/0043_attribute_is_filterable_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2 on 2025-09-22 11:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("core", "0042_attribute_name_fa_ir_attribute_name_he_il_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="attribute", + name="is_filterable", + field=models.BooleanField( + default=True, + help_text="designates whether this attribute can be used for filtering or not", + verbose_name="is filterable", + ), + ), + migrations.AlterUniqueTogether( + name="attribute", + unique_together={("name", "group")}, + ), + ] diff --git a/core/serializers/detail.py b/core/serializers/detail.py index 9609a81b..a027ad56 100644 --- a/core/serializers/detail.py +++ b/core/serializers/detail.py @@ -81,7 +81,11 @@ class CategoryDetailSerializer(ModelSerializer): request = self.context.get("request") user = getattr(request, "user", AnonymousUser()) - attrs_qs = obj.attributes.all() if user.has_perm("view_attribute") else obj.attributes.filter(is_active=True) + attrs_qs = ( + obj.attributes.filter(is_filterable=True) + if user.has_perm("view_attribute") + else obj.attributes.filter(is_active=True, is_filterable=True) + ) attributes = list(attrs_qs) attr_ids = [a.id for a in attributes]