Одинаковые динамические данные, поступающие в каждый столбец веб-страницы

Я делаю CRUD с использованием сериализаторов, foreignkeys и пытаюсь динамически перечислить категории, подкатегории. Например, категория = 9-6 одежда и ее подкатегории: курта, юбка, платье, куртасет. Я хочу, чтобы эти подкатегории были ниже только 9-6wear

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

Я пытался часами, но без особого успеха

ниже представлены мои модели

class Products(models.Model):
    categories = models.ForeignKey(Categories,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 Categories(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(Categories, 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)

ниже приведены сериализаторы

class SUBCategories(models.Model):
    category_name = models.ForeignKey(Categories, 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)

class CategoriesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Categories
        fields = "__all__"
        extra_kwargs = {'category_name': {'required': False}}

class POLLSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = "__all__"

ниже приведена моя функция страницы покупок

def shoppingpage(request):
    cat = Categories.objects.filter(isactive=True)
    category = CategoriesSerializer(cat,many=True)
    subcat = SUBCategories.objects.filter(isactive=True)
    subcategory = SUBCategoriesSerializer(subcat,many=True)
    return render(request,'polls/shoppingpage.html',{'category':category.data,'subcategory':subcategory.data})

Ниже приведена часть моего цикла shoppingpage.html for loop

{% 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>
                                            <a href="/kurta" target="_self">{{ans.sub_categories_name}}</a>
                                    </li>
                                </ul>
                            {% endfor %}                                      
                        </div>
                    </div>
                </div>  
                {% endfor %}

помощь будет высоко оценена, спасибо!

Потому что вы просто перебираете все подкатегории для всех категорий в вашем шаблоне:

{% for result in category %}
   ...
      {% for ans in subcategory %}

Вы должны изменить второй цикл так, чтобы он ссылался только на связанные подкатегории:

{% for ans in result.subcategory_set.all %}

Редактировать

В этом примере не нужны сериализаторы, как и подкатегория queryset. Представление может выглядеть следующим образом:

def shoppingpage(request):
   categories = Categories.objects.filter(isactive=True)
   context = {'categories': categories}
   return render(request,'polls/shoppingpage.html', context)
Вернуться на верх