Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Django function view rewriting to Class View ListView problem with Tag

Im trying to rewrite my whole app from function views to class views.
Right now Im struggle with Tag.

This how its looks before
views.py

def tagged(request, slug):
    tag = get_object_or_404(Tag, slug=slug)
    articles = Article.objects.filter(tag=tag)

    paginator = Paginator(articles, 5)
    page_number = request.GET.get("page")
    page_obj = paginator.get_page(page_number)

    context = {
        "tag": tag,
        "page_obj": page_obj,
    }
    return render(request, "web/home.html", context)

And right now Im trying rewrite it to Class View
but I dont know how to use get_object_or_404 in class and then filter my model Article by tag

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

class Tagged(ListView):
    model = Article
    paginate_by = 5

model.py

class Article(models.Model):
    headline = models.CharField(max_length=100)
    article_content = models.CharField(max_length=10000)
    article_author = models.ForeignKey(User, on_delete=models.CASCADE)
    article_photos = models.URLField(blank=True, max_length=300)
    yt_links = models.URLField(blank=True, max_length=300)
    article_image_upload = models.ImageField(blank=True, upload_to="images/")
    slug = models.SlugField(null=True, unique=True, max_length=100)
    tag = TaggableManager(blank=True)
    likes = models.ManyToManyField(User, related_name="article_likes")
    timestamp = models.DateTimeField(auto_now_add=True)

    def serialize(self):

        return {
            "id": self.id,
            "headline": self.headline,
            "article_content": self.article_content,
            "article_author": self.article_author,
            "article_image_upload": self.article_image_upload,
            "tag": self.tag,
            "yt_links": self.yt_links,
            "likes": self.likes,
            "timestamp": self.timestamp.strftime("%b %d %Y, %I:%M %p"),

        }

>Solution :

You can override get_queryset method to filter Article. For example:

class Tagged(ListView):
    model = Article
    paginate_by = 5

    def get_queryset(self):
        tag = get_object_or_404(Tag, slug = self.kwargs['slug'])
        return super().get_queryset().filter(tag=tag)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading