Как пропустить пустой элемент в колонке в Django DB

Я новичок в изучении Django и столкнулся с небольшой проблемой: Я работаю над страницей отображения продуктов, где некоторые продукты находятся в подкатегории. Я хочу иметь возможность отображать эту подкатегорию, когда это необходимо, но я не хочу, чтобы она отображалась, когда не используется. Сейчас она отображается на моей странице как 'NONE', чего я не хочу. Как мне это исправить?

Моя модель выглядит следующим образом:

class Category(models.Model):
category_name = models.CharField(max_length=200)
    sub_category = models.CharField(max_length=200,blank=True,null=True)

def __str__(self):
        return f" {self.category_name} {self.sub_category}"

На моей веб-странице я использую {{category}} в цикле for для отображения различных категорий. К сожалению, он показывает 'NONE', когда нет подкатегории.

Я пробовал следующее:

{% for category in categories  %}
<p>
    {% if category.sub_category == "NULL" %}
        {{category.category_name}}
    {% else %}
        {{category}}    
    {% endif %}
</p>
{% endfor %}

Если значение NULL на стороне базы данных, оно будет None на стороне Django/Python, поэтому вы можете работать с:

{% for category in categories %}
<p>
    {% if category.sub_category is None %}
        {{ category.category_name }}
    {% else %}
        {{ category }}
    {% endif %}
</p>
{% endfor %}

Но вместо этого, более разумно исправить это в самой модели:

class Category(models.Model):
    category_name = models.CharField(max_length=200)
    sub_category = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        if self.sub_category is None:
            return self.category_name
        else:
            return f'{self.category_name} {self.sub_category}'

Это упрощает рендеринг до:

{% for category in categories %}
<p>
    {{ category }}
</p>
{% endfor %}
Вернуться на верх