'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 |
|---|
