noob
noob

Reputation: 140

Get post id in a Class based view

Trying to get post id in Detailview in views.py .I am trying to add like button on blog Detail page. I think I need to add id in kwargs in get_absolute_url function but that didn't work or I didn't add that correctly.so, please help me.

#views.py
class PostDetail(DetailView):
  model = Post
  template_name = 'post_detail.html'

def get_context_data(self, *args, **kwargs):
    context = super(PostDetail, self).get_context_data(*args, **kwargs)
    post = get_object_or_404(Post, id=self.kwargs['id'])
    is_liked = False
    if post.likes.filter(id=request.user.id).exists():
        is_liked = True
    context["post"] = post
    context["is_liked"] = is_liked
    return context

model.py

class Post(models.Model):
  cover = models.URLField(blank=True)
  tag = models.CharField(max_length=100, unique=True, default=0)
  title = models.CharField(max_length=200, unique=True)
  slug = models.SlugField(max_length=200, unique=True)
  author = models.ForeignKey(accountUser, on_delete=models.CASCADE)
  updated_on = models.DateTimeField(auto_now=True)
  content = models.TextField()
  likes = models.ManyToManyField(accountUser, related_name='likes', blank=True)
  created_on = models.DateTimeField(auto_now_add=True)
  status = models.IntegerField(choices=STATUS, default=0)

class Meta:
    ordering = ["-created_on"]

def __str__(self):
    return self.title

def total_likes(self):
    return self.likes.count()


def get_absolute_url(self):

    return reverse("post_detail", kwargs={"slug": str(self.slug)})

Error in terminal

#error
post = get_object_or_404(Post, id=self.kwargs['id'])
KeyError: 'id'

Upvotes: 0

Views: 1232

Answers (1)

rgermain
rgermain

Reputation: 716

self.kwargs is different in get_context_data kwargs, and kwargs depend of your url

replace:

post = get_object_or_404(Post, id=self.kwargs['id'])

by :

post = self.get_object()

you are in DetailView, so you have methods get_object, for getting yout post object with verify if object exsits

Upvotes: 2

Related Questions