Как скрыть категорию без статей?

У меня есть статьи, объединенные по категориям. Вот модели данных:

class Category(models.Model):
    name = models.CharField(max_length=200, verbose_name='Наименование')
    slug = models.SlugField(max_length=250, verbose_name='URL')
    created = models.DateTimeField(auto_now_add=True, verbose_name='Добавлено')

    objects = models.Manager()

    class Meta:
        ordering = ('name',)
        verbose_name = 'категорию'
        verbose_name_plural = 'Категории'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('main:article_list_by_category', args=[self.slug])


class Article(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Черновик'),
        ('published', 'Опубликовано'),
    )
    TYPE_ARTICLE_CHOICES = (
        ('Руководство', 'Руководство'),
        ('Инструкция', 'Инструкция'),
    )
    title = models.CharField(max_length=250, verbose_name='Заголовок')
    slug = models.SlugField(max_length=250, unique_for_date='publish', verbose_name='URL')
    type_article = models.CharField(max_length=15, choices=TYPE_ARTICLE_CHOICES, default='Инструкция',
                                    verbose_name='Тип статьи')
    category = models.ForeignKey(Category,
                                 related_name='article',
                                 on_delete=models.CASCADE, verbose_name='Категория')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts', verbose_name='Автор')
    body = RichTextUploadingField(verbose_name='Статья')
    publish = models.DateTimeField(default=timezone.now, verbose_name='Опубликовано')
    created = models.DateTimeField(auto_now_add=True, verbose_name='Добавлено')
    updated = models.DateTimeField(auto_now=True, verbose_name='Обновлено')
    status = models.CharField(max_length=12, choices=STATUS_CHOICES, default='draft', verbose_name='Статус')
    tags = TaggableManager()
    private = models.BooleanField(default=False, verbose_name='Приватная статья')

    objects = models.Manager()
    published = PublishedManager()

    class Meta:
        ordering = ('-publish',)
        verbose_name = 'статью'
        verbose_name_plural = 'Статьи'
        index_together = (('id', 'slug'),)
        indexes = [GinIndex(fields=['title'])]

    def __str__(self):
        return self.title

Вот шаблон вывода:

<div class="container my-container-style">
    <div class="row">
        <div class="col-md-3">
            <h4 class="mb-4 category">Категории</h4>
            <div id="sidebar">
                <ul>
                    <li {% if not category %} class="selected" {% endif %}>
                        <a href="{% url 'main:articles_list' %}">Все</a>
                    </li>
                    {% for c in categories %}
                    <li {% if category.slug == c.slug %} class="selected" {% endif %}>
                        <a href="{{ c.get_absolute_url }}">{{ c.name }}</a>
                    </li>
                    {% endfor %}
                </ul>
            </div>
        </div>

        <div class="col-md-9">
            {% if tag %}
            <h2 class="tag_title">Статьи с тегами: "{{ tag.name }}"</h2>
            {% endif %}
            {% for articles in Article %}
            <div class="article col-md-12">
                <a href="{{ articles.get_absolute_url }}"><h2 class="article_title">{{ articles.title }}</h2></a>
                <div class="article_info">
                    <span>Автор: {{ articles.author.first_name }} &#171{{ articles.author }}&#187 {{ articles.author.last_name }}</span>
                    <span>Обновлено: {{ articles.updated|date:'d-m-Y' }}</span>
                    <span>Тип статьи: {{ articles.type_article }}</span>
                </div>
                <div class="article_body">
                    <p>{{ articles.body|safe|truncatewords:30 }}</p>
                </div>
                <div class="read_more">
                    <p class="mb-4"><a class="btn btn-secondary button_read back" href="{{ articles.get_absolute_url }}" role="button">Читать далее &#187;</a></p>
                </div>
            </div>
            {% endfor %}
            {% include "pagination.html" with page=Article %}
        </div>
    </div>
</div>

Я нашел похожий вопрос (Django how hide empty category), но я не могу скрыть категорию с помощью собственного фильтра. Как правильно скрыть категорию с нулем статей в ней?

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