Django - категория и slug в url
У меня есть функция, которая добавляет статью в избранное, когда пользователь нажимает на кнопку. Все было хорошо, пока я не решил добавить категорию в url адрес.
Ниже вы можете увидеть код, который я пытаюсь отладить.
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'),
]
Не могли бы вы сообщить мне, что я делаю не так?
Редактирование:
Я пытался добавить категорию в качестве параметра следующим образом:
@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)]))
Я также изменил url на
path('favourite_article/<str:category>/<slug:slug>', views.FavouriteArticle, name='favourite_article'),
Но я получаю Reverse for 'like_article' with arguments '('article-5',)' not found. 1 pattern(s) tried: ['like/(?P<category>[^/]+)/(?P<slug>[-a-zA-Z0-9_]+)$'] ошибку при входе на страницу.