Comments by "" (@Rabbit-9893) on "Уроки Django 3 - фильтр фильмов, Q в django - урок 17 | Михаил Омельченко" video.
-
1
-
1
-
@DjangoSchool
shop.html
<form action="{% url 'filter' %} " method="get" name="filter">
<div class="brands_products"><!--brands_products-->
<h2>Категория</h2>
<div class="brands-name">
<ul class="nav nav-pills nav-stacked">
{% for category in view.get_category %}
<li><a href=""><input type="checkbox" class="checked" name="category" value="{{ category.name }}">{{ category.name }}</a></li>
{% endfor %}
</ul>
</div>
</div><!--/brands_products-->
<div class="brands_products"><!--brands_products-->
<h2>Типы</h2>
<div class="brands-name">
<ul class="nav nav-pills nav-stacked">
{% for type in view.get_types %}
<li><a href=""><input type="checkbox" class="checked">{{ type.name }}</a></li>
{% endfor %}
</ul>
</div>
</div><!--/brands_products-->
<div class="brands_products"><!--brands_products-->
<h2>Бренд</h2>
<div class="brands-name">
<ul class="nav nav-pills nav-stacked">
{% for brands in view.get_brands %}
<li><a href=""><input type="checkbox" class="checked">{{ brands.name }}</a></li>
{% endfor %}
</ul>
</div>
</div><!--/brands_products-->
<div class="price-range"><!--price-range-->
<h2>Цена</h2>
<div class="well">
{{ form.as_p}}
</div>
</div><!--/price-range-->
<p align="center"><button type="submit">Найти</button></p>
</form>
views.py
from django.shortcuts import render
from django.db.models import Q
from django.core.paginator import Paginator
from django.views.generic.base import View
from django.views.generic import ListView, DetailView
from .forms import FilterPrice
from .models import Tovar, Category, Brands, Type
class CategoryBrandsType:
def get_category(self):
return Category.objects.all()
def get_brands(self):
return Brands.objects.all()
def get_types(self):
return Type.objects.all()
class FilterTovarView(CategoryBrandsType, ListView):
def get_queryset(self):
queryset = Tovar.objects.filter(
Q(category__in=self.request.GET.getlist("category")) |
Q(brands__in=self.request.GET.getlist("brands")) |
Q(type__in=self.request.GET.getlist("type"))
).distinct()
return queryset
class TovarListView(CategoryBrandsType, ListView): #КЛАСС ВЫВОДА ТОВАРОВ
def get(self, request):
tovary = Tovar.objects.all()#
form = FilterPrice(request.GET)
if form.is_valid():
if form.cleaned_data["min_price"]:
tovary = tovary.filter(price_tovar__gte=form.cleaned_data["min_price"])
if form.cleaned_data["max_price"]:
tovary = tovary.filter(price_tovar__lte=form.cleaned_data["max_price"])
return render(request, "shop.html", {"tovar_list": tovary, "form": form})
urls.py
from django.urls import path
from .import views
urlpatterns = [
path("", views.TovarListView.as_view()),
path("filter/", views.FilterTovarView.as_view(), name='filter'),
]
1
-
1
-
1
-
1