nikitamikheev
@nikitamikheev

Выводятся продукты родительной категории, а не дочерней. В чём дело?

Приветствую, у меня небольшая проблема. Необходимо чтобы отображалось на странице категории продукты если имеются что я уже сделал и подкатегория в которой если есть продукты то выводятся в списке они, если подкатегории то выводятся подкатегории.

Но при попытке сделать продукты подкатегории не выводятся в списке подкатегории, а выводятся продукты родителя
Иллюстрации
62fbc27a473c0386444110.png
62fbc2ee24d2d892178366.png

views.py
def show_category(request, hierarchy=None):
    hierarchy = (hierarchy or "").strip("/")  # Remove stray slashes
    if hierarchy:
        category_slug = hierarchy.split('/')
        parent = None

        for slug in category_slug[:-1]:
            parent = Categories.objects.get(parent=parent, slug=slug)

        try:
            category = Categories.objects.get(parent=parent, slug=category_slug[-1])
        except:
            products = get_object_or_404(Goods, slug=category_slug[-1])
            return render(request, "shop/product.html", {'good': products})
    else:
        category = None

    if category:
        if Goods:
            # Вот тут берутся продукты категории
            products = None
            products = category.products.all()
        return render(request, 'shop/categories.html', {'instance': category, 'products': products})
    # No category, show top-level content somehow

    category = Categories.objects.filter(parent=None)
    return render(request, 'shop/category.html', {'categories': category})


models.py
class Categories(MPTTModel):
    title = models.CharField(max_length=250, db_index=True)
    slug = models.SlugField(max_length=250, unique=True)
    imagePath = models.ImageField(upload_to='images/categories/', blank=True, verbose_name='Изображение категории')
    parent = TreeForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)

    class MPTTMeta:
        order_insertion_by = ['title']

    class Meta:
        unique_together = (('parent', 'slug',))
        verbose_name_plural = 'categories'
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'


class Goods(models.Model):
    title = models.CharField(max_length=150, db_index=True)
    slug = models.SlugField(max_length=150, db_index=True, unique=True)
    description = RichTextField(verbose_name='Описание')
    imagePath = models.ImageField(upload_to='images/goods', blank=True, verbose_name='Изображение категории')
    categoryID = TreeForeignKey('categories', related_name='products', null=True, blank=True, db_column='categoryID', on_delete=models.CASCADE)
    available = models.BooleanField(default=True)

    class Meta:
        ordering = ['title']
        index_together = ['id', 'slug']
        verbose_name = 'Товар'
        verbose_name_plural = 'Товары'


{% if instance %}
                    {% for i in instance.get_children %}
                        <div class="col-md-4">
                          <div class="card">
                              <img src="/media/{{ i.imagePath }}" class="card-img-top" id="first">
                              <div class="card-body">
                                  <h5 class="card-title fw-bold">{{ i.title }}</h5><br>
                                  <ul class="list-group list-group-flush">
                                    {% if products %}
                                        {% for product in products %}
                                            <li class="list-group-item link"><a id="{{ product.id }}" href="{{ instance.get_absolute_url }}/{{ product.slug }}" data-image="/media/{{ product.imagePath }}">{{ product.title }}</a></li>
                                        {% endfor %}
                                    {% elif i %}
                                        {% for cat in i.get_children %}
                                            <li class="list-group-item link"><a id="{{ cat.id }}" href="{{ instance.get_absolute_url }}/{{ cat.slug }}/{{ cat.slug }}" data-image="/media/{{ cat.imagePath }}">{{ cat.title }}</a></li>
                                        {% endfor %}
                                    {% endif %}
                                  </ul>
                              </div>
                          </div>
                        </div>
                    {% endfor %}
                {% endif %}



# Это левый блок продукта категории в Иллюстрации

{% if products %}
                    {% for product in products %}
                        <div class="col-md-4">
                            <div class="card mb-4">
                                <img class="card-img-top" src="/media/{{ product.imagePath }}" alt="Card image cap">
                                <div class="card-body">
                                    <h5 class="card-title fw-bold">{{ product.title }}</h5>
                                    <p class="card-text">{{ product.description|safe|slice:":84" }}</p>
                                        <a href="{{ instance.get_absolute_url }}/{{ product.slug }}" class="nav-link" style="margin-top: 8px">Подробнее...</a>
                                </div>
                            </div>
                        </div>
                    {% endfor %}
                {% endif %}


Подскажите пожалуйста, как решить эту проблему.
  • Вопрос задан
  • 25 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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