You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django应用中为每个Item设置独立的专属评论区

问题修复方案

1. 修正models.py字段定义

你当前使用的OneToOneField为一对一关系,会限制单个Item只能关联1条评论、单个用户只能发布1条评论,不符合评论场景的一对多需求,修改为ForeignKey:

class Comment(models.Model):
    comment_user = models.ForeignKey(User, on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="comments")
    content = models.TextField(default='')

修改后执行python manage.py makemigrations和python manage.py migrate同步数据库结构。

2. 修正views.py评论查询逻辑

你之前调用Comment.objects.all()查询了全站点所有评论,所以所有Item页面都会展示相同的评论,需要过滤出当前详情页对应Item的关联评论:

class ShopDetailView(DetailView):
    model = Item 
    template_name = 'shop/detail.html'
    context_object_name = 'item'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 仅查询当前Item的关联评论
        context['comments'] = Comment.objects.filter(item=self.object)
        # 也可以用定义的related_name简化写法:context['comments'] = self.object.comments.all()
        return context

模板遍历示例

在detail.html中可以直接遍历comments变量展示对应评论:

{% for comment in comments %}
<div class="comment">
    <span>用户:{{ comment.comment_user.username }}</span>
    <p>{{ comment.content }}</p>
</div>
{% empty %}
<p>该商品暂无评论</p>
{% endfor %}

内容的提问来源于stack exchange,提问作者user16476339

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:57:05