【发布时间】:2019-11-10 07:31:57
【问题描述】:
我的模型使用外键建立关系。
class Cat1(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length = 100)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=50)
productId = models.AutoField(max_length=50,primary_key=True)
productType = models.CharField(max_length=50)
matType = models.CharField(max_length=100,default='Use comma , to seperate multiple materials')
seller = models.ForeignKey(User, related_name='sellers',on_delete=models.CASCADE,default='NA')
cat_1 = models.ForeignKey(Cat1,related_name='catlevel1',on_delete=models.CASCADE,default='NA')
然后我有我对页面的看法。 我需要在其中显示我单击的类别中的所有产品。 我的观点是:
def cat_products(request,pk):
categories = get_object_or_404(Cat1, pk=pk) #here the categories get the category i clicked on homepage.
products = Product.objects.all()
return render(request, 'products.html', {'categories':categories,'products':products})
那么products.html就是:
<!--Full Code not shown for easy understanding-->
{% for prod in categories.products.all %}
{{categories.name}}
<tr>
<td>{{ prod.name }}</td>
<td>{{ prod.matType }}</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
{% endfor %}
所以基本上类别是可以用来访问当前类别的名称。产品是所有产品的列表。
我已经尝试过上面的代码,但没有产生任何结果。 现在下面的代码显示了所有产品对象。
<!--Full Code not shown for easy understanding-->
{% for prod in products %}
{{categories.name}}
<tr>
<td>{{ prod.name }}</td>
<td>{{ prod.matType }}</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
{% endfor %}
但这种方式会显示所有产品,而不考虑类别。 所以这件男士类别的派对衬衫也出现在女士身上。
我尝试只打印所有产品
{% for prod in products %}
{{categories.name}} 上面的代码行显示了类的名称。
这很好用,没有问题。
后端能够访问数据库没问题,但我无法弄清楚模板部分 这是产品对象中存储为 Men 的产品和类别。
我应该能够在男性类别中看到男性类别产品,在女性类别中看到女性产品。
【问题讨论】:
标签: python django templates view