Как заставить эти подкатегории отображаться в основных категориях? - PullRequest
0 голосов
/ 01 октября 2019

Я очень новичок в Django, и я делаю сайт электронной коммерции. Я пытаюсь иметь подкатегории для своих продуктов, поэтому я назначил каждому продукту подкатегории, а в подкатегории есть parent_category. Однако у меня проблемы с отображением всех продуктов родительской категории. Можете ли вы помочь мне, пожалуйста

class Category(models.Model):
    name             = models.CharField(max_length=50)
    slug             = models.SlugField(unique = True)
    parent_category  = models.ForeignKey('self', null=True, blank=True,on_delete=models.DO_NOTHING)
def list_of_post_by_category(request,category_slug):
    maincat = []
    subcat = []
    categories = Category.objects.all()
    obj = Product_info.objects.filter()
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        obj = obj.filter(category=category)
    for c in categories:
        if c.parent_category == None:
            maincat.append(c)
        elif c.parent_category == category:
            subcat.append(c)
    context = {"category":maincat,"subcategory":subcat,"obj_list":obj,"showcat":category}
    return render(request,'cat.html',context)

1 Ответ

1 голос
/ 01 октября 2019

Вы можете использовать встроенный ORM для фильтрации правильных категорий. Это повысит производительность, потому что вы будете получать только соответствующие категории для текущей страницы.

Однако существуют некоторые другие проблемы с вашим кодом:

  • Когда не определен псевдоним category_slug,оператор elif c.parent_category == category: не будет работать так, как задумано, поскольку категория не определена. В этом случае вы, вероятно, хотите, чтобы subcat был пустым списком.
  • Ваши имена переменных не очень многословны. Не совсем понятно, к какому классу относится экземпляр obj, и из их названий не ясно, что maincat и subcat являются списками.
def list_of_post_by_category(request,category_slug):

    product_info_list = Product_info.objects.all()
    sub_categories = []

    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        product_info_list = product_info.filter(category=category)
        sub_categories = Category.objects.filter(parent_category = category)

    main_categories = Category.objects.filter(parent_category__isnull = True)

    context = {
                 "category" : main_categories,
                 "subcategory" : sub_categories,
                 "obj_list" : product_info_list,
                 "showcat" : category
               }

    return render(request,'cat.html',context)

Еще одна вещь, которую я бы назвалРекомендуется изменить имя класса Product_info на ProductInfo, в соответствии с руководством по стилю PEP-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...