python - 如何在 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 值必须限制为使用切片的一个结果。”
解决方案
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)
推荐阅读
- r - 匹配 r 中的两列
- ruby-on-rails - 如何使用 Rails 在生产环境中设置 Sendgrid 入站解析?
- firebase - 如何将 Firebase 与 Admob 连接起来?
- matrix - 如何通过围绕相机位置旋转所有点来模拟 3D 空间中的相机旋转?
- javascript - How to select random item from drop-down list using Cypress?
- c++ - 用“= default”声明复制构造函数或根本不声明它有什么区别?
- azure-devops - 如何在持续交付期间自动在 keycloack 上注册客户端?
- python - Python:复制函数参数时的意外行为列表
- php - Laravel 折叠不同尺寸的集合中的项目
- swift - 快速比较 DateComponents