Я новичок в джанго, да и в питоне тоже, сейчас практикуюсь на создании интернет магазина и послал перед проблемой что логично было бы при выборе категории также выводить и товары из всех её подкатегорий. Гугл, к сожалению не помог... я думаю что нужно как нибудь правильно отфильтровать товар в представлениях, но как? навыков не хватает понять. Использую Django-mptt для дерева категорий (меньше запросов к БД)
models.py
class Category(MPTTModel):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True, unique=True)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
class MPTTMeta:
order_insertion_by = ['name']
class Meta:
ordering = ('name',)
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
def get_absolute_url(self):
return reverse('shop:product_list_by_category',
args=[self.slug])
def __str__(self):
return self.name
views.py
def product_list(request, category_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True).order_by('-created')
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
return render(request,
'shop/shop.html',
{'category': category,
'categories': categories,
'products': products})
html
<div class="category_conteiner">
{% recursetree categories %}
<div class="sub_menu_category">
<a href="{{ node.get_absolute_url }}" class="subcatbtn">{{ node.name }}</a>
{% if not node.is_leaf_node %}
<div class="subcat_content">
<div class="subcat_column">
{{ children }}
</div>
</div>
{% endif %}
</div>
{% endrecursetree %}
Сейчас сортировка товаров получается только по той категории которая была выбрана при добавлении товара