Как я могу нажать на любую из категорий в списке и быть перенаправленным на все активные объявления в этой категории? Django

Яm working on a django project (iновичок) и я сделал html страницу, отображающую список доступных категорий. Я хочу сделать каждую из них ссылкой и когда пользователь нажимает на нее, он должен быть перенаправлен на список активных объявлений, основанных на этой категории. Я просто не могу понять, как это сделать. Вот мой код:

models.py

class Category(models.Model):
    category = models.CharField(max_length=64)

    def __str__(self):
        return self.category


class Listings(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=128)
    description = models.CharField(max_length=822)
    price = models.FloatField()
    sold = models.BooleanField(default=False)
    category = models.ForeignKey(Category, on_delete=models.CASCADE,blank=True, null=True, 
    related_name="listings_category")
    categories = models.ManyToManyField(Category, blank=True, related_name="select_category")
    image_url = models.CharField(max_length=128,blank=True, null=True)
    
    def __str__(self):
        return f"{self.title}"

urls.py

path('category/', views.category, name="category"),

path("listing/<str:listing_id>", views.listing, name="listing")

views.py

def category(request):
    cat = Category.objects.filter().values('category')
    category_id = Category.objects.filter().values('id')
    z = []
    for c in category_id:
        z.append(c['id'])
    
    listing = Listings.objects.filter(category__in= z)
    categories = Category.objects.all()
    category = Category.objects.filter(id__in=z)
    print(category)

    return render(request, "auctions/category.html",{
        "categories":categories,
        "category":category,
        "listing":listing
    })

def listing(request, listing_id):
        listing = Listings.objects.get(id=listing_id)
        user = request.user
        owner = True if listing.user == user else False
        category = Category.objects.get(category=listing.category)
        comments = Comments.objects.filter(listing=listing.id)
        watching = WatchList.objects.filter(user = user, listing = listing)
       
        if request.method == "POST":
            comment = request.POST["comment"]
            
            if comment != '':
                Comments.objects.create(user=user, listing=listing, comment=comment)
                return HttpResponseRedirect(listing_id)

        return render(request, "auctions/listing.html", {
                "listing": listing,
                "category": category,
                "owner": owner,
                "comments": comments,
                "watching": WatchList.objects.filter(user = user, listing = 
                listing).values('watching'),
            })
 

HTML

{% block body %}
    {% for cat in category %}
    <ul>
        <li>
            <a href="">{{ cat.category }}</a>
        </li>
    </ul>
    {% endfor %}
{% endblock %}

Ive got the link (Category) to render the html page with the list of available categories but I cant link them to their respective active listings from the database. Любая помощь будет очень признательна.

Вам нужно добавить url для списка объявлений, а затем представление, которое его обрабатывает, а также шаблон.

в urls.py:

path('category/<int:category_id>', views.listing_list, name="listing_list"),

в views.py (не забудьте задать имя шаблона в вызове рендеринга):

def listing_list(request, category_id):
    from django.shortcuts import get_object_or_404
    category = get_object_or_404(Category, pk=category_id)
    # use a reverse lookup on listings_category foreign key name
    listings = category.listings_category.all()

    return render(request, "auctions/<template name goes here>.html",{
        "category":category,
        "listings":listings
    })

В вашем шаблоне будет объект категории, а также все объявления, принадлежащие ей в контексте.

Затем в вашем auctions/category.html вам нужно будет изменить ваш HTML:

{% block body %}
    {% for cat in category %}
    <ul>
        <li>
            <a href="{% url 'listing_list' category_id=category.pk %}">{{ cat.category }}</a>
        </li>
    </ul>
    {% endfor %}
{% endblock %}
Вернуться на верх