Ответ из StackOverflow если у кого то будет похожая ситуация
Вы можете сделать это на дополнительном шаге. Вам нужно получить дочерние категории, а затем отфильтровать по ним товары. Пример кода:
category = Category.objects.get(category_slug=category_slug)
sub_categories=category.get_descendants(include_self=True)
Product.objects.filter(category__in=sub_categories)
А вот полный код для вашего случая.
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)
sub_categories = category.get_descendants(include_self=True)
products = products.filter(category__in=sub_categories)
return render(request,
'shop/shop.html',
{'category': category,
'categories': categories,
'products': products})