Django开发:如何获取指定专辑的对应评论?
解决Django中获取指定专辑专属评论的问题
你当前的核心问题是albuminfo视图未对评论做精准筛选,ReviewRating.objects.all()会返回所有专辑的评论。以下是两种直接有效的修复方案:
方案1:直接过滤对应专辑的评论
修改albuminfo视图,通过filter方法筛选出当前专辑的评论,同时可以优化异常处理和评论排序:
from django.shortcuts import get_object_or_404 def albuminfo(request, id): # 用get_object_or_404替代get,避免专辑不存在时抛出服务器错误 album = get_object_or_404(albums, id=id) # 筛选当前专辑的已启用评论,并按创建时间倒序排列 reviews = ReviewRating.objects.filter(album=album, status=True).order_by('-created_date') return render(request, "home/AlbumInfo.html", {'album' : album, 'reviews' : reviews})
方案2:利用Django反向关联查询
由于ReviewRating通过ForeignKey关联到albums,Django会自动为albums模型生成反向关联管理器reviewrating_set,可以直接通过专辑对象获取其专属评论:
from django.shortcuts import get_object_or_404 def albuminfo(request, id): album = get_object_or_404(albums, id=id) # 通过反向关联获取当前专辑的已启用评论,同样按时间倒序 reviews = album.reviewrating_set.filter(status=True).order_by('-created_date') return render(request, "home/AlbumInfo.html", {'album' : album, 'reviews' : reviews})
额外优化建议
- 模型命名规范:Django模型类建议使用单数形式(如
Album而非albums),符合PEP8编码规范,提升代码可读性。 - 评论状态控制:保留
status=True的过滤条件,确保只展示审核通过的评论,符合你模型中status字段的设计初衷。 - 异常处理:
get_object_or_404会在专辑不存在时返回404页面,比直接使用objects.get()抛出异常更友好。
内容的提问来源于stack exchange,提问作者Narton
相关产品推荐
相关产品推荐

