首页 > 解决方案 > Django 2 在我的模板页面中结合 ListView 和 DetailView

问题描述

我有两个模型“产品”和“品牌”产品有品牌字段ManyToMany将产品与相关品牌联系起来

## models.py 
class Product(models.Model):
    title           = models.CharField(max_length=120)
    slug           = models.SlugField(blank=True, unique=True)
    description     = models.TextField()
    brand = models.ManyToManyField(Brand)
class Brand(models.Model):
    title = models.CharField(max_length=250, unique=True)
    slug = models.SlugField(max_length=250, unique=True)
    description = models.TextField(blank=True)
## url.py 
re_path(r'^brands/(?P<slug>[\w-]+)/$', BrandDetail.as_view(), name = 'branddetail'),
## views.py
class BrandDetail(DetailView):
    queryset = Brand.objects.all()
    template_name = "brands/brand.html"
## brands/brand.html 
{{ object.title }} <br/>
{{ object.description }} <br/>

现在,当我渲染brand.html时,它会很好地显示品牌名称和描述

我的问题是,如果我想在同一页面中呈现链接到特定品牌的产品列表“考虑到 URL 中已经传递的品牌信息”,我该怎么做?

该类是DetailsView,它在查询集中只有品牌详细信息,如图所示!我需要任何解决方案而不是 ne

标签: pythondjangolistviewdetailview

解决方案


你不需要一个ListView,你可以迭代product_set品牌,比如:

{{ object.title }} <br/>
{{ object.description }} <br/>
products:
{% for product in object.product_set.all %}
    {{ product.title }} <br/>
{% endfor %}

推荐阅读