Django开发中如何将评论正确关联到其对应的所属帖子
你当前代码的问题主要有三点:1、Comment模型的comment_default默认值逻辑错误,只会返回第一个帖子的ID;2、跳转评论提交页时没有传递当前访问的帖子ID,视图无法识别要绑定的目标帖子;3、评论创建视图没有自动绑定帖子的逻辑,完全依赖错误的默认值自然会绑定错。
以下是完整修改步骤:
第一步:修正Comment模型的错误配置
删掉错误的默认值函数和对应配置:
class Comment(models.Model): author = models.ForeignKey(User, default=1, on_delete = models.CASCADE ) content = models.TextField() created_on = models.DateTimeField(auto_now_add=True) # 删掉comment_default函数,post字段去掉default参数 post = models.ForeignKey(UserPost, on_delete=models.CASCADE, related_name="comments") def __str__(self): """String for representing the comment object.""" return '%s - %s - %s' % (self.post.title, self.author, self.created_on) def get_absolute_url(self): return reverse('userpost-detail', args=[str(self.post.id)])
第二步:修改评论创建路由配置
在项目的urls.py中给评论创建路由增加帖子ID参数:
# 原comment-create对应的配置修改为 path('comment/<int:post_id>/add/', CommentCreate.as_view(), name='comment-create'),
第三步:修改详情页的评论跳转链接
模板中跳转评论页时携带当前帖子的ID:
<a class="btn btn-primary" href="{% url 'comment-create' userpost.pk %}" role="button">Leave a Comment</a>
第四步:重写CommentCreate视图逻辑
先在views.py顶部导入依赖:
from django.shortcuts import get_object_or_404
再修改视图,自动绑定对应帖子:
class CommentCreate(CreateView): model = Comment # 去掉post字段,不需要用户手动选择 fields = ['content'] def form_valid(self, form): # 从url参数获取当前要绑定的帖子对象 post = get_object_or_404(UserPost, pk=self.kwargs['post_id']) # 给评论实例绑定帖子 form.instance.post = post # 可选:绑定当前登录用户作为评论作者,替换默认的固定ID form.instance.author = self.request.user return super().form_valid(form) def get_success_url(self): # 提交成功后跳回对应帖子的详情页 return reverse('userpost-detail', kwargs={'pk': self.kwargs['post_id']})
内容的提问来源于stack exchange,提问作者AllyZ
相关产品推荐
相关产品推荐

