Реализован полный CRUD для тегов товаров

Упрощена модель ProductTag:
- Удалены поля soft delete (is_deleted, deleted_at, deleted_by)
- Добавлено поле is_active для управления статусом
- Упрощены менеджеры и методы модели

Создан CRUD функционал:
- ProductTagForm: форма с автогенерацией slug
- Views: список, создание, просмотр, редактирование, удаление
- URL маршруты: /products/tags/*
- Шаблоны: list, form, detail, confirm_delete

Особенности:
- Поиск по названию и slug
- Фильтрация по статусу активности
- Статистика использования тегов в товарах/комплектах
- Пагинация (20 на страницу)
- Предупреждение при удалении с отображением связанных объектов
- Добавлена ссылка "Теги" в навигацию

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-11 23:14:01 +03:00
parent 4a1f8266de
commit 1a0360f8c0
12 changed files with 733 additions and 48 deletions

View File

@@ -0,0 +1,42 @@
# Generated by Django 5.0.10 on 2025-11-11 18:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('products', '0001_initial'),
]
operations = [
migrations.RemoveIndex(
model_name='producttag',
name='products_pr_is_dele_ea9be0_idx',
),
migrations.RemoveIndex(
model_name='producttag',
name='products_pr_is_dele_bc2d9c_idx',
),
migrations.RemoveField(
model_name='producttag',
name='deleted_at',
),
migrations.RemoveField(
model_name='producttag',
name='deleted_by',
),
migrations.RemoveField(
model_name='producttag',
name='is_deleted',
),
migrations.AddField(
model_name='producttag',
name='is_active',
field=models.BooleanField(db_index=True, default=True, verbose_name='Активен'),
),
migrations.AddIndex(
model_name='producttag',
index=models.Index(fields=['is_active'], name='products_pr_is_acti_7f288f_idx'),
),
]