Задать вопрос

Как создать фильтр в django для интернет-магазина?

Как создать фильтр в django для интернет-магазина?
Как сделать фильтр для интернет-магазина по нескольким параметрам?
Примерно как здесь http://www.asos.com/ru/Fashion-Online-39/Cat/pgeca...
Обязательно ли использовать js?

Необходим динамический фильтр. То есть чтобы QuerySet сформировывался после заданных условий поиска.
Например:
1 сессия:
Нажал на "Мужское" -> вышли все товары filter(пол = "мужские"),
дальше нажал на "куртки" -> вышли все товары filter(категория ="куртки", пол = "мужские"),
дальше нажал "размер 50" -> вышли все товары filter(категория ="куртки", пол = "мужские", размер ="размер 50"),
дальше нажал на "куртки" -> вышли все товары filter( пол = "мужские",размер ="размер 50")

QuerySet должен меняться в зависимости от условии фильтрации, как в представление передать эти условия? Нужно использовать форму?

Может нужно сохранять QuerySet с помощью pickle?

Рад буду любому ответу!
т.к. оч мало мат.части )
  • Вопрос задан
  • 16244 просмотра
Подписаться 9 Оценить Комментировать
Решения вопроса 1
ali_aliev
@ali_aliev
Разработчик на Django/Python, JavaScript
Очень хорошая штука https://github.com/alex/django-filter проще использовать вместе с https://github.com/rasca/django-enhanced-cbv

Пример views.py

from enhanced_cbv.views import ListFilteredView

from .models import MyModel
from .filters import MyFilter


class MiViewWithFilter(ListFilteredView):
    filter_set = MyFilter
    model = MyModel


filters.py (работаем так же как и с обычной формой)

import django_filters

from .models import MyModel


class MyFilter(django_filters.FilterSet):
    def __init__(self, *args, **kwargs):
        super(MyFilter, self).__init__(*args, **kwargs)
        self.fields['email'].label = "New Email Label"
    class Meta:
        model = MyModel
        fields = {'name': ['exact', 'icontains'],
                  'price': ['exact', 'gte', 'lte'],
                 }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Можно реализовать на стороне сервера (Python/Django), можно - на стороне клиента (JavaScript).
Как? Много способов.
Вариант с JavaScript: Isotope.js
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы