首页 > 解决方案 > 如何在 Django 中获取特定博客文章的评论?

问题描述

#Models.py
#BlogPost Model
class BlogPost(models.Model):
    POST_CATEGORY = (
        ('Education','Education'),
        ('Tech','Tech'),
        ('Automobile','Automobile'),
        ('Other','Other')
    )
    title = models.CharField(max_length=150)
    thumbnail = models.ImageField(upload_to='Blog Thumbnail')
    category = models.CharField(max_length=100, choices = POST_CATEGORY )
    content = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    slug = models.CharField(max_length=200, unique=True, null=True)
    tags = models.CharField(max_length=150, null=True, blank=True)
    writer = models.ForeignKey(User,on_delete=models.CASCADE,null=False)

    def __str__(self):
        return self.title

#BlogComment Model
class BlogComment(models.Model):
    post = models.ForeignKey(BlogPost,on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    comment = models.TextField()
    parent = models.ForeignKey('self',on_delete=models.CASCADE,null=True)
    timestamp = models.DateTimeField(auto_now_add=True)


#Views Code
def blogPost(request, slug):
    post = BlogPost.objects.filter(slug=slug)
    '''How to get comment for particularly this post'''
    comments = BlogComment.objects.filter(post=post)  # It is giving a wrong answer
    '''The error I am getting 
       ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.'''
    print(comments)
    context = {
        'Post':post,
        'Comments':comments
    }
    return render(request,'blogpost.html',context)

如何获得这篇博文的特别评论?我得到的错误——“ValueError:精确查找的 QuerySet 值必须限制为使用切片的一个结果。”

标签: pythondjangodjango-modelsdjango-views

解决方案


objects.filter() 返回一个查询集。filter 方法需要一个 BlogPost 实例(以获取 id)或一个整数 id,因为 objects.filter(post= pk )

使用 objects.get(),这样你得到一个 BlogPost 的实例,而不是一个查询集:

post = BlogPost.objects.get(slug=slug)
comments = BlogComment.objects.filter(post=post)

补充:

您还可以通过不同的方式处理帖子不存在时可能发生的异常。其中之一是返回 Http404,这是最简单的方法:

from django.shortcuts import get_object_or_404
post = BlogPost.objects.get_object_or_404(slug=slug)

推荐阅读