Django проект для отображения списка категорий в виде списка, тогда url категории отображает все посты в этой категории
Я работаю над проектом Django, в котором я хотел бы отобразить список всех категорий на главной странице в виде ссылок. Когда человек нажимает на категорию, он попадает на страницу, где отображаются все посты, относящиеся к этой категории. Внутри страницы со списком постов я хотел бы отобразить заголовок как название категории. Также я хотел бы, чтобы url содержал название категории. Мой код работает нормально при отображении этих страниц, но проблема в том, что он использует id вместо поля slug. Когда я заменяю .id на .slug, я получаю ошибку:
ValueError at /category/electricals Поле 'id' ожидало число, но получило 'electrics'
.
Вот мой Models.py:
class Category(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(null=True, blank=False)
slug = models.SlugField(unique=True, null=True)
def __str__(self):
return self.title
class Service(models.Model):
category = models.ForeignKey('Category', on_delete=models.CASCADE)
title = models.CharField(max_length=100)
image = models.ImageField(null=True, blank=False)
description = models.TextField(null=False, blank=False)
service_id = models.UUIDField(default=uuid.uuid4, primary_key=True, unique=True, editable=False)
slug = models.SlugField(unique=True, null=True)
def __str__(self):
return self.title
А вот мой views.py;
def landing_page(request):
categorys = Category.objects.all()
context = {'categorys':categorys}
return render(request, 'users/homepage.html', context)
def categories(request, cats):
category_services = Service.objects.filter(category=cats)
context = {'cats':cats,'category_services':category_services }
return render(request, 'users/categories.html', context)
Мой urls.py:
path('category/<str:cats>', views.categories, name='category'),
Шаблон:
{% for category in categorys %}
<!-- <li><a href="{% url 'category' category.slug %}" >{{category.title}}</a></li> -->
<li><a href="{% url 'category' category.id %}" >{{category.title}}</a></li>
{% endfor %}
Я пробовал заменить, используя код ниже, но он не работает
category_services = Service.objects.filter(category=cats.replace('id', 'slug')))