[英]Filtering content by category(many to many field) using django
我想使用類別過濾我網站上的項目。 我設法按標題進行過濾,但我不確定這個。
模型.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()
視圖.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)
主頁.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>
目前該頁面顯示列表中的類別,下面有 {% for item in items %} 語句女巫顯示所有項目,它們只能按標題過濾。
首先,我認為最好使用cat.pk
作為選項的值:
<option value="{{ cat.pk }}">{{ cat }}</option>
現在我們也可以過濾類別:
def HomeView(request):
item_list = Item.objects.all()
category_list = Category.objects.all()
query = request.GET.get('q')
if query:
item_list = item_list.filter(title__icontains=query)
cat = request.GET.get('cat')
if cat:
item_list = item_list.filter(category__pk=cat)
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.