from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy from django.views.generic import (CreateView, DetailView, ListView, RedirectView, UpdateView) from .models import Category, NewsItem class CategoryList(ListView): model = Category class NewsItemCreate(CreateView): model = NewsItem success_url = reverse_lazy("dashboard:dashboard") def form_valid(self, form): form.instance.owner = self.request.user return super().form_valid(form) class NewsItemDetail(DetailView): model = NewsItem class NewsItemList(ListView): category = None tag = None paginate_by = 6 def get_queryset(self): category_slug = self.kwargs.get("category", None) self.tag = self.kwargs.get("tag", None) if category_slug: self.category = get_object_or_404(Category, slug=category_slug) return NewsItem.objects.filter(category=self.category).filter( is_published=True ) elif self.tag: return NewsItem.objects.filter(tags=self.tag).filter(is_published=True) else: return NewsItem.objects.filter(is_published=True) def get_context_data(self, *, object_list=None, **kwargs): context = super(NewsItemList, self).get_context_data(**kwargs) context["category"] = self.category context["tag"] = self.tag return context class NewsItemRedirectView(RedirectView): def get_redirect_url(self, *args, **kwargs): url = get_object_or_404(NewsItem, origin_text=kwargs["origin_text"]) url.origin_times_followed += 1 url.save() return url.origin_link class TagList(ListView): template_name = "news/tag_list.html" def get_queryset(self): return NewsItem.tags.tag_model.objects.all()