Я бы хотел отфильтровать элементы на моем сайте, используя категорию. Мне удалось выполнить фильтрацию по названию, но я не уверен в этом.
models.py
class Category(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name
class Item(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
discount_price = models.FloatField(blank=True, null=True)
category = models.ManyToManyField(Category)
label = models.CharField(choices=LABEL_CHOICES, max_length=1)
slug = models.SlugField()
description = models.TextField()
image = models.ImageField()
views.py
def HomeView(request):
item_list = Item.objects.all()
category_list = Category.objects.all()
query = request.GET.get('q')
if query:
item_list = Item.objects.filter(title__icontains=query)
paginator = Paginator(item_list, 10)
page = request.GET.get('page')
try:
items = paginator.page(page)
except PageNotAnInteger:
items = paginator.page(1)
except EmptyPage:
items = paginator.page(paginator.num_pages)
context = {
'items': items,
'category': category_list
}
return render(request, "home.html", context)
home . html
<form method="GET" action=".">
<div class="form-group col-md-4">
<label for="category">Category</label>
<select id="cat" class="form-control" name="cat">
<option selected>Choose...</option>
{% for cat in category %}
<option value="{{ cat }}">{{ cat }}</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-primary">Search</button>
</form>
В настоящее время на странице отображаются категории в списке, а под выражением {% для элемента в элементах%} отображается все элементы, и их можно фильтровать только по заголовку.