Я пытаюсь позволить своим пользователям отмечать избранные сообщения, которые они могут прочитать позже.Я видел некоторые решения, использующие FBV, но я хочу сделать любимые маркеры с CBV.
Как я могу сделать это, используя представление на основе классов django (DetailView)?
модель
class Article(models.Model):
...
favorite = models.ManyToManyField(get_user_model(), related_name='favorite', blank=True)
def get_absolute_url(self):
return reverse('article_detail', args=[str(self.id)])
просмотров
class ArticleDetailView(ObjectViewMixin, DetailView):
model = Article
context_object_name = 'article'
...
def get_context_data(self, **kwargs):
...
return context
def favorite_post(request, id):
post = get_object_or_404(Article, id=id)
if post.favorite.filter(id=request.user.id).exists():
post.favorite.remove(request.user)
else:
post.favorite.add(request.user)
return redirect('article_detail', pk=article.pk)
URL
urlpatterns = [
path('<int:pk>/edit/', ArticleUpdateView.as_view(), name='article_update'),
path('<int:pk>/favorite_post/', favorite_post, name='favorite_post'),
]