Search code examples
pythondjangolistviewdetailview

Django 2 combine ListView and DetailView in my template page


i have two models "product" and "brand" product has brand field ManyToMany to link the products with the concerned brand

## 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/>

Now when am rendring brand.html it shows the brand title and description fine

My question is if i want to render in the same page the list of products linked to specific brand "considering the brand slug already passed in the URL", how i can do that?

the class is DetailsView and it has only Brand details in the query set as shown!! i need any solution not ne


Solution

  • You do not need a ListView for that, you can iterate over the product_set of the brand, like:

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