Comment system in class based view in django showing error

446 views
Skip to first unread message

Ali Ahammad

unread,
Jun 7, 2020, 3:01:06 PM6/7/20
to Django users

the basic source files are herehttps://pastebin.pl/view/a0a1fc38  and i am trying to do it in class based view for further upgrade. My main project is written in class based view and it will be easy to integrate for me.

views.py codes are give below:

from .models import Post,Comment
from .forms import CommentForm
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView,DetailView
from django.shortcuts import redirect,render, get_object_or_404
from django.http import HttpResponseRedirect

class PostList(ListView):
    model=Post
    template_name='home.html'
    context_object_name='post_list'
    queryset=Post.objects.all()

class PostDetail(DetailView):
    model=Post

    def get_queryset(self):
        queryset = super(PostDetail, self).get_queryset()
        post=Post.objects.all()
        comments=Comment.objects.filter(post=post)
        return queryset

    def get_context_data(self, **kwargs):
        context = super(PostDetail, self).get_context_data(**kwargs)
        if request.method == "POST":
            comment_form = CommentForm(request.POST or None)
            if comment_form.is_valid():
                comment=comment_form.save(commit=False)
                comment.post=post
                comment.save()
        else:
            comment_form = CommentForm()
        context['post']=post.objects.all()
        context['comments']=comments.objects.all()
        context['comment_form']=comment_form()        
        template_name='Post_detail.html'
        return render(request, template_name, context)

when i execute the runserver it shows NameError at /post/1/ name 'request' is not defined

the models.py is:

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
    content = models.TextField()

    def __str__(self):
        return self.title

class Comment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
    name = models.CharField(max_length=80)
    body = models.TextField()
    reply=models.ForeignKey('Comment',on_delete=models.CASCADE,null=True)


    def __str__(self):
        return self.name

the function base view was:

def PostDetail(request,pk):
    post = get_object_or_404(Post, pk=pk)
    comments=Comment.objects.filter(post=post)
    if request.method == "POST":
        comment_form = CommentForm(request.POST or None)
        if comment_form.is_valid():
            comment=comment_form.save(commit=False)
            comment.post=post
            comment.save()
    else:
        comment_form = CommentForm()
    context={
        'post':post,
        'comments':comments,
        'comment_form':comment_form,
    }
    return render(request, 'post_detail.html', context)

that function base view was working fine but i am trying to convert it into class based view so that i can use custommixin and other mixin later on. how can i make it work?

please let me know. thanx in advance

Yamen Gamal Eldin

unread,
Jun 8, 2020, 1:53:25 AM6/8/20
to django...@googlegroups.com
in CBVs the request is an attribute of the main view class you are inheriting from it.
so to fix your issue, change this :
- request.method == "POST"
- self.request.method == "POST"

another thing i've noticed in those lines:

post=Post.objects.all()
comments=Comment.objects.filter(post=post)

You are trying to filter with a foreign key of type post using a value with a queryset type. That will mostly give you an error somewhere down the road.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/17ba1d3b-8ed2-470f-9004-213357b2d403o%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages