繁体   English   中英

无法在模板视图中使用“ categories.products .all”访问数据。 带外键的Django模型

[英]Not able to access data using 'categories.products .all ' in template view. Django Models with foreign key

我有使用外键建立关系的模型。

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 %}

网页是category.products.all的for循环 因此,基本上类别是可用于访问当前类别的名称。产品是所有产品的列表。

我已经尝试了上面的代码,但没有结果。 现在,下面的代码显示了所有产品对象。

<!--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循环中仅包含“产品”的网页

但是通过这种方式,它可以显示所有产品,而无需考虑类别。 因此,“男士”类别中的此派对衬衫也显示在“女士”中。

妇女类产品网页

我尝试只打印所有产品{% for prod in products %} {{categories.name}}以上代码中的行显示了类的名称。 可以正常工作,没有问题。

后端能够访问数据库没有问题,但是我无法弄清模板部分。这是产品和作为Men存储在product对象中的类别。 带有产品详细信息的Django管理面板。

我应该能够在“男士”类别中看到“男士”类别产品,在“女士”类别中看到“女士”商品。

您需要使用catlevel1而不是产品:

{% for prod in categories.catlevel1.all %}

   {{categories.name}} 
    <tr>
      <td>{{ prod.name }}</td>
      <td>{{ prod.matType }}</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
    </tr>
  {% endfor %}

因为你已经定义related_namecatlevel1当你创建的ForeignKey的关系, ProductCat1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM