ничего не выводится на страницу со всеми продуктами в Django
Есть модель с тремя классами категория-подкатегория-продукты
class Category(models.Model):
name_category = models.CharField(verbose_name = 'Название категории', max_length = 100, null=True)
image = models.ImageField(null=True, blank=True, upload_to="media/", verbose_name='Изображение')
slug = models.SlugField(max_length=160, unique=True, null=True)
def __str__(self):
return self.name_category
class Subcategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='категория', related_name='sub')
name_subcategory = models.CharField(verbose_name = 'Название подкатегории', max_length = 100, null=True)
image = models.ImageField(null=True, blank=True, upload_to="media/", verbose_name='Изображение')
slug = models.SlugField(max_length=160, unique=True, null=True)
def __str__(self):
return self.name_subcategory
class Product(models.Model):
subcategory = models.ForeignKey(Subcategory, on_delete=models.CASCADE, verbose_name='категория',related_name='prod')
name_product = models.CharField(verbose_name = 'Название товара', max_length = 100, null=True)
image = models.ImageField(null=True, blank=True, upload_to="media/", verbose_name='Изображение')
price = models.IntegerField('цена')
def __str__(self):
return self.name_product
мой views.py
class CategoryView(ListView):
"""список категорий"""
model = Category
class CategoryDetailView(DetailView):
"""Полное описание фильма"""
model = Category
class SubcategoryDetailView(ListView):
"""список продуктов"""
model = Subcategory
url.py
urlpatterns = [
path("", views.CategoryView.as_view()),
path('<slug:slug>/', views.CategoryDetailView.as_view(), name='category_detail'),
path('<slug:slug>/<slug:slug_sub>/', views.SubcategoryView.as_view(), name='subcategory_list'),
]
шаблон страницы с которой перехожу на страницу со всеми продуктами(category_detail.html)
{% extends 'base.html' %}
{% block content %}
<h2>{{ category.name_category }}</h2>
{% for sub in category.sub.all %}
<a href="{% url 'subcategory_list' slug=category.slug slug_sub=sub.slug %}"> {{sub.name_subcategory}}</a>
<img src="{{sub.image.url}}" width="100px" height="100px">
{% endfor %}
{% endblock %}
шаблон страницы(subcategory_list.html) со всеми продуктами(тут я не написал вывод продуктов т.к. не передается даже и название подкатегории)
{% extends 'base.html' %}
{% block content %}
{{sub.name_subcategory}}
{% endblock %}
никак не могу понять почему на последнюю страницу ничего не выводит. Возможно проблема в классах во views т.к. раньше пробовал писать только через функции
Ответы (1 шт):
смотри как получается:
у тебя SubcategoryDetailView должен быть наследником DetailView, ты ведь получаешь подробную информацию о конкретном объекте SubCategory, либо делай его ListView для модели Product.
Если поменять на DetailView, то нужно еще указать, что информация о подкатегории будет брать по не по параметру slug а slug_sub(slug - относится к категории).
Так же, ты обращаешься в шаблоне к объекту как sub, то нужно указать это во вью
class SubcategoryDetailView(DetailView):
"""список продуктов"""
model = Subcategory
slug_url_kwarg = "slug_sub"
context_object_name = 'sub'
и не забудь переименовать html файл с subcategory_list.html в subcategory_detail.html