'Django - category and slug in url

I have a function that addds article to favourites when user hits the button. Everything was fine until I decided to add category to url address.

Below you can see the code that I am trying to debug.

models.py

class Article(models.Model):
    author = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
    title = models.CharField(max_length=254)
    category = models.ForeignKey(Category, on_delete = models.CASCADE, blank=True, related_name='articles')
    favourite = models.ManyToManyField(User, default=None, blank=True, related_name='favourite_article')
    slug = models.SlugField(unique=True, blank=True, max_length=254)
    

    def get_absolute_url(self):
        return reverse("article", kwargs={"category": self.category, "slug": self.slug})

views.py

@login_required
def FavouriteArticle(request, slug):
    article = get_object_or_404(Article, slug=slug)
    favourized = False
    if article.favourite.filter(id=request.user.id).exists():
        article.favourite.remove(request.user)
        favourized = False
    else:
        article.favourite.add(request.user)
        favourized = True
        messages.success(request, 'Article is now available in favourites.')
    return HttpResponseRedirect(reverse('article', args=[str(category), str(slug)]))

url.py

urlpatterns = [
    path('article/<category>/<slug:slug>', views.ArticleDetailView.as_view(), name='article'),
    path('favourite_article/<category>/<slug:slug>', views.FavouriteArticle, name='favourite_article'),
    path('like/<str:category>/<slug:slug>/', views.LikeArticle, name='like_article'),
]

Could you please let me know what am I doing wong?

Edit:

I tried to add category as paramenter like this:

@login_required
def FavouriteArticle(request, category, slug):
    article = get_object_or_404(Article, category=category, slug=slug)
    favourized = False
    if article.favourite.filter(id=request.user.id).exists():
        article.favourite.remove(request.user)
        favourized = False
    else:
        article.favourite.add(request.user)
        favourized = True
        messages.success(request, 'Article is now available in favourites.')
    return HttpResponseRedirect(reverse('article', args=[str(category), str(slug)]))

I also changed url to

path('favourite_article/<str:category>/<slug:slug>', views.FavouriteArticle, name='favourite_article'),
path('like/<str:category>/<slug:slug>/', views.LikeArticle, name='like_article'),

But I am getting Reverse for 'like_article' with arguments '('article-5',)' not found. 1 pattern(s) tried: ['like/(?P<category>[^/]+)/(?P<slug>[-a-zA-Z0-9_]+)$'] error when entering the page.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source