试图在views.py的Detailview中获取帖子ID。我试图在博客“ Detail”页面上添加“ like”按钮。 我想我需要在get_absolute_url函数的kwargs中添加id,但这不能正常工作,或者我没有正确添加。所以,请帮助我。
#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
post = get_object_or_404(Post, id=self.kwargs['id'])
KeyError: 'id'
答案 0 :(得分:2)
self.kwargs在get_context_data kwargs中有所不同,并且kwargs取决于您的网址
替换:
post = get_object_or_404(Post, id=self.kwargs['id'])
作者:
post = self.get_object()
您在DetailView中,因此拥有get_object方法,可通过验证对象是否存在来获取对象