我是 Django 的新手,目前在创建按类别和品牌分组的非常简单的产品列表时遇到问题。
这是预期的结果:
- Category 1
+ Brand A
* Product 1
* Product 2
+ Brand B
* Product 3
* Product 4
- Category 2
+ Brand A
* Product 5
* Product 6
+ Brand C
* Product 7
* Product 8
这是我的models.py
from django.db import models
class Brand(models.Model):
brand = models.CharField(max_length=200)
country = models.CharField(max_length=200, blank=True, null=True)
email = models.EmailField(max_length=200, blank=True, null=True)
url = models.URLField(max_length=300)
def __str__(self):
return self.brand
class Category(models.Model):
category_id = models.CharField(max_length=200, default="cat")
name = models.CharField(max_length=200)
def __str__(self):
return self.category_id
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
desc = models.CharField(max_length=200, blank=True, null=True)
img = models.CharField(max_length=200)
url = models.URLField(max_length=300, blank=True, null=True)
def __str__(self):
return f"{self.brand} - {self.name} - {self.category}"
我的views.py
def product_list(request):
products = Product.objects.all()
categories = Category.objects.all()
brands = Brand.objects.all()
context = {
'products': products,
'categories': categories,
'brands': brands
}
return render(request, "product/product-list.html", context)
这是我在 product-list.html
<ul>
{% for category in categories %}
<li>{{ category }}</li>
<ul>
{% for brand in brands %}
<li> {{ brand }}</li>
<ul>
{% for product in products %}
{% if product.category == category and product.brand == brand %}
<li> {{ product }}</li>
{% endif %}
{% endfor %}
</ul>
{% endfor %}
</ul>
{% endfor %}
</ul>
其中一个问题是,即使一个品牌没有与该类别相关联的产品,它仍然会显示出来并引导我认为这肯定不是最好的方法。
如果您能指出我正确的方向,我将不胜感激!
谢谢
斯蒂法诺
答案 0 :(得分:0)
您有一个从 Product
到 Brand
的多对一关系,您需要为 Brand
到 Category
添加另一个。之后您可以使用相关对象引用。请查看此文档:https://docs.djangoproject.com/en/3.2/ref/models/relations/