【问题标题】:Django 2 combine ListView and DetailView in my template pageDjango 2 在我的模板页面中结合 ListView 和 DetailView
【发布时间】:2020-03-06 01:38:27
【问题描述】:

我有两个模型“产品”和“品牌” 产品具有品牌字段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

【问题讨论】:

    标签: python django listview detailview


    【解决方案1】:

    您不需要ListView,您可以遍历品牌的product_set,例如:

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

    【讨论】:

    • 我将这些行添加到##brands/brand.html 仍然只呈现品牌名称和描述
    • @FahdMannaa:你确定你渲染的品牌相关的Product对象吗?
    • 您说得对,该品牌没有产品,现在可以使用非常感谢您
    • 谢谢威廉,但如果我需要别的东西我会回复你的 :)
    猜你喜欢
    • 2017-05-08
    • 2021-05-30
    • 1970-01-01
    • 2021-12-14
    • 2013-05-31
    • 2013-05-19
    • 2014-01-14
    • 2020-05-14
    • 2021-01-02
    相关资源
    最近更新 更多