我正在使用序列化器、外键执行CRUD操作,并试图动态列出类别,sub_categories。例如,类别= 9-6磨损和它的子类别是库塔,短裙,服装,库塔塞特。我想在下面的这些子类别中只穿9-6
问题是,其他子类也提到了库尔塔、短裙、连衣裙和库塔塞特,我不想这样做,如下所示
我试了几个小时,但没有成功。
下面是我的模型
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 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(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 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 result.subcategory_set.all %}
<ul class="listitem-list">
<li>
<a href="/kurta" target="_self">{{ans.sub_categories_name}}</a>
</li>
</ul>
{% endfor %}
</div>
</div>
</div>
{% endfor %}
非常感谢您的帮助,谢谢!
发布于 2022-07-19 08:00:22
这是因为您只是循环遍历模板中所有类别的所有子类别:
{% for result in category %}
...
{% for ans in subcategory %}
您应该更改第二个循环,以便它只引用相关的子类别:
{% for ans in result.subcategory_set.all %}
编辑
在本例中,序列化程序是不必要的,子类别查询集也不是必需的。视图可以如下所示:
def shoppingpage(request):
categories = Categories.objects.filter(isactive=True)
context = {'categories': categories}
return render(request,'polls/shoppingpage.html', context)
编辑很多错误都归结于上下文/变量的不对齐:
# models.py
model Category
...
model Subcategory
...
# views.py
context = {'categories': Category.objects.all()}
# template
{% for category in categories %}
{% for subcategory in category.subcategory_set.all %}
...
https://stackoverflow.com/questions/73032928
复制相似问题