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

Django图书站点仅登录用户可评论功能表单提交失效问题求助

问题原因及修复方案

1. 评论表单实例化参数错误(核心问题)

你在add_comment视图中给CommentForm传递了instance=books,但CommentForm绑定的模型是Comments,你传入的是Books模型的实例,两者完全不匹配,导致表单验证直接失败,无法进入保存逻辑。新增评论不需要传递instance参数,直接删除该参数即可。

2. 评论外键字段名不匹配

Comments模型中关联图书的外键字段名为book,但你在保存评论时写的是comment.books = books,字段名多了后缀s,赋值无效,保存时会触发字段不能为空的错误。

3. Comments模型__str__方法调用错误字段

你在Comments的__str__方法里调用了self.livre.title,但模型中没有livre这个字段,应该使用你定义的外键名book。


修复后的views.py中add_comment函数

@login_required(login_url='login')
def add_comment(request, comment_id):
    form = CommentForm()
    books = get_object_or_404(Books, pk=comment_id)
    user = request.user

    if request.method == "POST":
        # 去掉错误的instance参数
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.user = user
            # 字段名改为book,和模型定义一致
            comment.book = books
            comment.save()
            return redirect('book_detail', books.id)

    context = {'form': form}
    return render(request, 'comment_form.html', context)

修复后的Comments模型

class Comments(models.Model):
    book = models.ForeignKey(Books, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        # 把livre改为book
        return '{} - {}'.format(self.book.title, self.user)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:57:00