From 71cb0fc2db60c0381408aab73ae73868f67cb5a1 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Wed, 21 May 2025 12:37:30 +0300 Subject: [PATCH] Features: 1) Add AutoSlugField "slug" to Category model with unique and auto-populating behavior; 2) Include "slug" field in CategoryFilter and relevant serializers (detail and simple); 3) Add "slug" to GraphQL object type for categories; Fixes: None; Extra: Add migration for new "slug" field in Category model. --- core/filters.py | 1 + core/graphene/object_types.py | 1 + core/migrations/0022_category_slug.py | 19 +++++++++++++++++++ core/models.py | 8 ++++++++ core/serializers/detail.py | 1 + core/serializers/simple.py | 1 + 6 files changed, 31 insertions(+) create mode 100644 core/migrations/0022_category_slug.py diff --git a/core/filters.py b/core/filters.py index 20dfc386..8c0331c5 100644 --- a/core/filters.py +++ b/core/filters.py @@ -251,6 +251,7 @@ class CategoryFilter(FilterSet): uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") name = CharFilter(field_name="name", lookup_expr="icontains") parent_uuid = UUIDFilter(field_name="parent__uuid", lookup_expr="exact") + slug = CharFilter(field_name="slug", lookup_expr="exact") order_by = OrderingFilter( fields=( diff --git a/core/graphene/object_types.py b/core/graphene/object_types.py index 214ed570..86ff703c 100644 --- a/core/graphene/object_types.py +++ b/core/graphene/object_types.py @@ -123,6 +123,7 @@ class CategoryType(DjangoObjectType): "attributes", "children", "name", + "slug", "description", "image", "min_max_prices", diff --git a/core/migrations/0022_category_slug.py b/core/migrations/0022_category_slug.py new file mode 100644 index 00000000..f034cd70 --- /dev/null +++ b/core/migrations/0022_category_slug.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2 on 2025-05-21 09:35 + +import django_extensions.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('core', '0021_rename_name_ar_ar_attribute_name_ar_ar_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='category', + name='slug', + field=django_extensions.db.fields.AutoSlugField(allow_unicode=True, blank=True, editable=False, null=True, + populate_from=('uuid', 'name'), unique=True), + ), + ] diff --git a/core/models.py b/core/models.py index 3894846d..1077a134 100644 --- a/core/models.py +++ b/core/models.py @@ -198,6 +198,14 @@ class Category(NiceModel, MPTTModel): verbose_name=_("category description"), ) + slug = AutoSlugField( + populate_from=("uuid", "name"), + allow_unicode=True, + unique=True, + editable=False, + null=True, + ) + def __str__(self): return self.name diff --git a/core/serializers/detail.py b/core/serializers/detail.py index 74e3b6d6..0ef62c6f 100644 --- a/core/serializers/detail.py +++ b/core/serializers/detail.py @@ -60,6 +60,7 @@ class CategoryDetailSerializer(ModelSerializer): "markup_percent", "filterable_attributes", "children", + "slug", "created", "modified", ] diff --git a/core/serializers/simple.py b/core/serializers/simple.py index e2c47c70..cc6e206d 100644 --- a/core/serializers/simple.py +++ b/core/serializers/simple.py @@ -49,6 +49,7 @@ class CategorySimpleSerializer(ModelSerializer): "uuid", "name", "image", + "slug", "children", ]