@David5

Как сделать фильтрацию по категориям?

Здравствуйте, пишу сайт, как не пробовал не получается сделать фильтрацию. Есть карточки с категориями(пример на фото), когда нажимаешь на определенную(карточку с категорией) нужно чтобы отображались товары с этой категорией, а остальные нет. У товара есть ForeForeignKey на модель с категориями. Заранее спасибо!
60a8f87ddf4dc094211818.png
models.py 

from django.db import models
from django.shortcuts import reverse


class Categories(models.Model):
    category = models.CharField(max_length=250)
    image = models.ImageField(null=True)
    sale =  models.CharField(max_length=250, null=True, blank=True)
    slug = models.SlugField(max_length=250, unique=True)



    def __str__(self):
        return self.category


    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'
    
class Country(models.Model):
    name = models.CharField('Страна',max_length=250)


    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Страна'
        verbose_name_plural = 'Страны'



class Product(models.Model):
    STATUS_CHOICES = (
        ('нет в наличии', 'нет в наличии'),
        ('в наличии', 'в наличии'),
    )

    category = models.ForeignKey(Categories, on_delete=models.CASCADE,  null=True)
    name = models.CharField('Название',max_length=250)
    model = models.CharField('Модель',max_length=250, null=True)
    image = models.ImageField(null=True)
    availability = models.CharField('Наличие',max_length=30, choices=STATUS_CHOICES, default='нет в наличии')
    description = models.TextField('Описание')
    country = models.ForeignKey(Country, on_delete=models.CASCADE,  null=True)
    warranty = models.CharField('Гарантия', max_length=250, null=True)
    price =  models.IntegerField('Цена')


    def __str__(self):
        return self.name
    

    class Meta:
        verbose_name = 'Продукт'
        verbose_name_plural = 'Продукты'


views.py


from django.shortcuts import render
from .models import Categories, Product

def index(request):
    category = Categories.objects.all()
    return render(request, 'shop/base.html',{'category': category})



def category_detail(request, slug):
    cat = Categories.objects.get(slug__iexact=slug)
    products = Product.objects.filter()
    return render(request, 'shop/category_detail.html', {'cat':cat, 'products':products})  



def product_detail(request, id):
    product = Product.objects.get(id=id)
    return render(request, 'shop/product_detail.html', {'product':product})


urls.py


from django.urls import path
from .views import index, category_detail, product_detail

urlpatterns = [
    path('', index, name='index'),
    path('<str:slug>/', category_detail, name='category_detail'),
    path('product/<int:id>/', product_detail, name='product_detail')
]
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
@David5 Автор вопроса
я решил проблему таким образом
def category_detail(request, slug):
    cat = Categories.objects.get(slug__iexact=slug)
    products = Product.objects.filter(category__slug = slug)
    return render(request, 'shop/category_detail.html', {'cat':cat, 'products':products})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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