簡體   English   中英

使用 django 按類別(多對多字段)過濾內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM