Имя подкатегории не отображается, несмотря на то, что условие if принимает значение True

Я знаю, что я уже задавал этот вопрос, но я действительно борюсь и не могу решить этот вопрос

Я сделал CRUD продукта с использованием сериализаторов и внешних ключей и делаю динамическую страницу с категориями и подкатегориями. Проблема в том, что несмотря на выполнение условия if, подкатегории не выводятся, только имя_категории, как показано ниже модели: enter image description here

class Products(models.Model):
    categories = models.ForeignKey(Category,on_delete=models.CASCADE)
    sub_categories = models.ForeignKey(SUBCategories,on_delete=models.CASCADE)
    color = models.ForeignKey(Colors,on_delete=models.CASCADE)
    size = models.ForeignKey(Size,on_delete=models.CASCADE)
    image = models.ImageField(upload_to = 'media/',width_field=None,height_field=None,null=True)
    title = models.CharField(max_length=70)
    price = models.CharField(max_length=10)
    sku_number = models.CharField(max_length=10)
    product_details = models.CharField(max_length=1000)
    quantity = models.IntegerField(default=0)
    isactive = models.BooleanField(default=True)

class Category(models.Model):
    #made changes to category_name for null and blank
    category_name = models.CharField(max_length=30)
    category_description = models.CharField(max_length=30)
    isactive = models.BooleanField(default=True)

class SUBCategories(models.Model):
    category_name = models.ForeignKey(Category, on_delete=models.CASCADE)
    sub_categories_name = models.CharField(max_length=30)
    sub_categories_description = models.CharField(max_length=30)
    isactive = models.BooleanField(default=True)

ниже представлен файл shoppingpage.html

{% for result in category %}
                <div class="col-md-3">
                    <div class="lynessa-listitem style-01">
                        <div class="listitem-inner">
                            <a href="/9-6wear" target="_self">
                                <h4 class="title">{{result.category_name}}</h4>
                            </a>
                            {% for ans in subcategory %}   
                                <ul class="listitem-list">
                                    <li>
                                                                          
                                        {% if ans.category_name == result.category_name %}
                                            <a href="/kurta" target="_self">{{ans.sub_categories_name}}</a>
                                        {% endif %}
                                    </li>
                                </ul>
                            {% endfor %}                                      
                        </div>
                    </div>
                </div>  
{% endfor %}

Помощь будет очень признательна, спасибо!

Не видя вида, я не могу быть уверен, но кажется, что вы делаете

ans.category_name == result.category_name

где ans - объект SUBCategories, а result - объект Category. В этом случае ans.category_name является полем ForeignKey, а result.category_name - полем CharField, так что вы, вероятно, не захотите сравнивать их.

Если вы хотите вывести все категории, а для каждой категории вывести каждую подкатегорию, я бы сделал что-то вроде этого:

Дайте вашему внешнему ключу имя в models.py, также измените запутанные имена полей. Также модели должны быть в единственном числе, поэтому измените имя модели тоже:

class SubCategory(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='sub_categories')
    sub_category_name = models.CharField(max_length=30)
    sub_category_description = models.CharField(max_length=30)
    is_active = models.BooleanField(default=True)

Затем создайте представление для него:

from django.views.generic import TemplateView

class YourView(TemplateView):
    template_name = '<your template name>'
    
    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        # use the foreign key name 'sub_categories' to prefetch related objects to reduce database queries
        context['categories'] = Category.objects.all().prefetch_related('sub_categories')
        return context

Тогда в вашем шаблоне вам вообще не нужна проверка if, так как вы получите только подкатегории, связанные с данной категорией. Мы используем обратный поиск category.sub_categories.all для получения подкатегорий, связанных с категорией:

{% for category in categories %}
                <div class="col-md-3">
                    <div class="lynessa-listitem style-01">
                        <div class="listitem-inner">
                            <a href="/9-6wear" target="_self">
                                <h4 class="title">{{category.category_name}}</h4>
                            </a>
                            {% for sub_category in category.sub_categories.all %}   
                                <ul class="listitem-list">
                                    <li>                              
                                        <a href="/kurta" target="_self">{{sub_category.sub_category_name}}</a>
                                    </li>
                                </ul>
                            {% endfor %}                                      
                        </div>
                    </div>
                </div>  
{% endfor %}
Вернуться на верх