Reputation: 140
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
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