@Vlados1py
Начинающий питонист

Django вывод всех категори. Название категории и товар, ниже название категории и соответствующий товар и т.д.?

------------------------------
Делаю уже очень долго и не получается, я был бы очень благодарен за помощь
Спасибо большое за внимание.
А то уже прям крышу рвёт
------------------------------
Нужно чтобы на главной странице было название категории и соответствующий товар ниже название страницы и товар
и т.д.
------------------------------
class Shop(models.Model):
title = models.CharField(max_length=255, verbose_name="Заголовок")
slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name="URL")
content = models.TextField(blank=True, verbose_name="Текст статьи") # Текст статти
photo = models.ImageField(upload_to="photos/%Y/%m/%d/", verbose_name="Фото")
time_create = models.DateTimeField(auto_now_add=True, verbose_name="Время создания")
time_update = models.DateTimeField(auto_now=True, verbose_name="Время изменения")
is_published = models.BooleanField(default=True,verbose_name="Публикация")
price = models.DecimalField(max_digits=10, decimal_places=2, null=True, verbose_name="Цена")
cat = models.ForeignKey('Category', on_delete=models.PROTECT, verbose_name="Категории")
def __str__(self):
return self.title

# маршрут для ссылок на товар по id
def get_absolute_url(self):
return reverse('post', kwargs={'post_slug': self.slug})

class Category(models.Model):
name = models.CharField(max_length=100, db_index=True, verbose_name='Категории')
slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name='URL')

def __str__(self):
return self.name

def get_absolute_url(self):
return reverse('category', kwargs={'cat_slug': self.slug})

class Meta:
verbose_name = "Категории"
verbose_name_plural = "Категории"
ordering = ['id']
------------------------------
class DataMixin:
def get_user_context(self, **kwargs):
context = kwargs
products_slider = Shop.objects.all().order_by('cat_id')

# Если постов нет в категории то категория не высвечивается
cats = Category.objects.annotate(Count('shop'))
context['menu'] = menu
# cats это по категориям
context['cats'] = cats
context['products_slider'] = products_slider

if 'cat_selected' not in context:
context['cat_selected'] = 0
return context
--------------------------------
class ShopCategory(DataMixin, ListView):
model = Shop
template_name = 'shop/index.html'
context_object_name = 'posts'
# добовляет исключение если страница не найдена
allow_empty = False

# поиск по категориям в самих категориях
def get_queryset(self):
return Shop.objects.filter(cat__slug=self.kwargs['cat_slug'], is_published=True)

# Передаем меню
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)

c_def = self.get_user_context(title='Категория - ' + str(context['posts'][0].cat),
cat_selected=context['posts'][0].cat_id)

return dict(list(context.items()) + list(c_def.items()))
--------------------------------
class ShopHome(DataMixin, ListView):
model = Shop
template_name = 'Shop/index.html'
context_object_name = 'posts'

def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
c_def = self.get_user_context(title='Главная страница')
return dict(list(context.items()) + list(c_def.items()))

def get_queryset(self):
return Shop.objects.filter(is_published=True)
---------------------------------
{% for c in cats %}

div class="container"
p>{{c.name}}
ul class="products clearfix"
{% for p in posts %}
{% if p.category %}

li class="product-wrapper"

p>%7B%7Bp.photo.url%7D%7D
p

a href="{{ p.get_absolute_url }}">{{p.title}} /p
a href="{{ p.get_absolute_url }}">{{ p.price }} /li
/ul
{% endif %}
{% endfor %}
/div
{% endfor %}
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы