Как избавиться от дублей категорий в Django?

Помогите разобраться, пожалуйста. Не получается отфильтровать категории и подкатегории. Категории дублируются столько раз сколько подкатегорий в них есть.
HTML

    <header class="header">
        <div class="filter-category">
            <button class="button button_type_all" data-filter="all">Все</button>
            {% for c in categories %} {# Все категории #}
                {% if c.get_prods__count > 0 %} {# Все категории в которых есть товары #}
                    {% for sc in subcategories %} {# Все подкатегории #}
                        {% if sc.get_prods__count > 0 %} {# Все подкатегории в которых есть товары #}
                            {% if c.pk == sc.category_id %} {# Все категории рк которых совпадает с id категории в подкатегории#}
                                <button class="button button_type_dog"
                                        data-filter="{{ c.slug }},{{ sc.slug }}">{{ c.cat_name }}</button> {# Кнопки для категорий по которым производится фильтрация. Если в категории несколько подкатегорий, то и кнопок с одинаковым названием будет несколько. Нужно только по одной кнопке для каждой категории #}
                            {% endif %}
                        {% endif %}
                    {% endfor %}
                {% endif %}
            {% endfor %}
        </div>
        <div class="filter">
            {% for c in categories %} {# Все категории #}
                {% if c.get_prods__count > 0 %} {# Все категории в которых есть товары #}
                    {% for sc in subcategories %} {# Все подкатегории #}
                        {% if sc.get_prods__count > 0 %} {# Все подкатегории в которых есть товары #}
                            {% if c.pk == sc.category_id %} {# Все категории рк которых совпадает с id категории в подкатегории#}
                                <button class="button button_type_cat"
                                        data-filter="{{ sc.slug }}">{{ sc.sub_cat_name }}</button> {# Все кнопки подкатегорий по которым производится фильтрация#}
                            {% endif %}
                        {% endif %}
                    {% endfor %}
                {% endif %}
            {% endfor %}
        </div>
    </header>
    <main class="content">
        <div class="container">
            {% for c in categories %} {# Все категории #}
                {% if c.get_prods__count > 0 %} {# Все категории в которых есть товары #}
                    {% for sc in subcategories %} {# Все подкатегории #}
                        {% if sc.get_prods__count > 0 %} {# Все подкатегории в которых есть товары #}
                            {% if c.pk == sc.category_id %} {# Все категории рк которых совпадает с id категории в подкатегории#}
                                {% for p in prods %} {# Все товары #}
                                    {% if p.subcategory_id == sc.pk %} {# Все товары id подкатегорий которых совпадают с рк подкатегорий #}
                                        {% if p.photo %}
                                            <div class="card {{ sc.slug }}">
                                                <a href="{{ p.get_absolute_url }}"> {# карточки товаров #}
                                                    {{ p.title }}
                                                </a>
                                            </div>
                                        {% endif %}
                                    {% endif %}
                                {% endfor %}
                            {% endif %}
                        {% endif %}
                    {% endfor %}
                {% endif %}
            {% endfor %}
        </div>
    </main>

Models

from django.urls import reverse
from django_unique_slugify import unique_slugify
from pytils.translit import slugify
from smart_selects.db_fields import ChainedForeignKey


class Category(models.Model):
    cat_name = models.CharField(max_length=25, verbose_name='Название')
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name='URL')
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)
    is_published = models.BooleanField(default=True)

    @staticmethod
    def get_all_categories():
        return Category.objects.all()

    def __str__(self):
        return self.cat_name

    def get_absolute_url(self):
        return reverse('category', kwargs={'cat_slug': self.slug})

    def save(self, *args, **kwargs):
        slug_str = slugify(self.cat_name)
        unique_slugify(self, slug_str)
        if not self.slug:
            self.slug = slugify(self.cat_name)
        super(Category, self).save(*args, **kwargs)

    class Meta:
        verbose_name_plural = 'Категории'
        verbose_name = 'Категория'
        ordering = ['cat_name']


class SubCategory(models.Model):
    category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Категория',
                                 related_name='get_subcats')
    sub_cat_name = models.CharField(max_length=25, unique=True, verbose_name='Название')
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name='URL')
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)
    is_published = models.BooleanField(default=True)

    @staticmethod
    def get_all_subcategories():
        return SubCategory.objects.all()

    def __str__(self):
        return self.sub_cat_name

    def get_absolute_url(self):
        return reverse('subcategory', kwargs={'cat_slug': self.category.slug, 'scat_slug': self.slug})

    def save(self, *args, **kwargs):
        slug_str = slugify(self.sub_cat_name)
        unique_slugify(self, slug_str)
        if not self.slug:
            self.slug = slugify(self.sub_cat_name)
        super(SubCategory, self).save(*args, **kwargs)

    class Meta:
        verbose_name_plural = 'ПодКатегории'
        verbose_name = 'ПодКатегория'
        ordering = ['sub_cat_name']


class Product(models.Model):
    price = models.DecimalField(max_digits=15, decimal_places=2, null=True, verbose_name='Цена')
    category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True, verbose_name='Категория',
                                 related_name='get_prods')
    subcategory = ChainedForeignKey(
        'SubCategory',
        on_delete=models.SET_NULL,
        null=True,
        verbose_name='ПодКатегория',
        related_name='get_prods',
        chained_field='category',
        chained_model_field='category',
        show_all=False,
        auto_choose=True,
        sort=True
    )
    title = models.CharField(max_length=255, verbose_name='Название')
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name='URL')
    content = models.TextField(blank=True, verbose_name='Текст')
    photo = models.ImageField(upload_to='images/%Y/%m/%d/', verbose_name='Фото')
    time_create = models.DateTimeField(auto_now_add=True, verbose_name='Создано')
    time_update = models.DateTimeField(auto_now=True, verbose_name='Обновлено')
    is_published = models.BooleanField(default=True, verbose_name='Опубликовано')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('product', kwargs={'cat_slug': self.category.slug, 'scat_slug': self.subcategory.slug,
                                          'prod_slug': self.slug})

    def save(self, *args, **kwargs):
        slug_str = slugify(self.title)
        unique_slugify(self, slug_str)
        if not self.slug:
            self.slug = slugify(self.title)
        super(Product, self).save(*args, **kwargs)

    class Meta:
        verbose_name = 'Товары'
        verbose_name_plural = 'Товары'
        ordering = ['-id']

Помогите, пожалуйста, составить правильную фильтрацию.

Вернуться на верх