Невозможно отфильтровать товары по категориям. Категории не отображаются при нажатии Django
Я пытаюсь отфильтровать объявления/продукты по категориям, нажатие на название любой категории должно привести пользователя на страницу, которая отображает все объявления в этой категории.
Когда я нажимаю на вкладку "Категория", отображаются названия категорий, которые были перечислены, но не отображаются листинги/продукты, прикрепленные к этой категории.
Я реализовал это до сих пор и хотел бы получить помощь, чтобы узнать, почему у меня возникает эта ошибка.
URLS.PY
path("category", views.all_category, name="all_category"),
MODELS.PY
class Category(models.Model):
name = models.CharField(max_length=25)
def __str__(self):
return self.name
class Auction(models.Model):
title = models.CharField(max_length=25)
description = models.TextField()
current_bid = models.IntegerField(null=False, blank=False)
image_url = models.URLField(verbose_name="URL", max_length=255, unique=True, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
category = models.ForeignKey(Category, max_length=12, null=True, blank=True, on_delete=models.CASCADE)
LAYOUT.HTML
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="{% url 'index' %}">Active Listings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'all_category' %}">Category</a>
{% for category in categories %}
<a class="nav-link" href="{% url 'all_category' %}?category={{ category.name}}">{{ category.name}}</a>
{% endfor %}
</li>
VIEWS.PY
def all_category(request):
categories = Category.objects.all()
category = request.GET.get('category')
if category == None:
products = Auction.objects.all().order_by('-created_at')
else:
products = Auction.objects.filter(category__name=category)
context = {'categories':categories, 'products':products}
return render(request, 'auctions/layout.html', context)
Я также пытался реализовать это, но это показалось хуже, так как не отображались объявления
FAILEDVIEWS.PY
def solo_category(request, name):
# if(Category.objects.filter(name=name)):
# products = Auction.objects.filter(category__name=name).order_by('-created_at')
# category_name = Category.objects.filter(name=name).first()
# context = {'products':products, 'category_name':category_name}
# return render(request, 'auctions/layout.html', context)
# else:
# messages.warning(request, 'This category is not available')
# return HttpResponseRedirect(reverse("index"))
