在基于类的视图中获取帖子ID

时间:2020-07-31 11:46:46

标签: django django-models django-views

试图在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'

1 个答案:

答案 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方法,可通过验证对象是否存在来获取对象

相关问题