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

能否将第二段Django视图代码改为第一段形式?运行报错求解答

问题:将Django的create_new视图修改为指定形式是否可行?

我尝试把第二段Django视图代码改成第一段的形式,但操作后出现错误,请问这种修改是否可行?两段代码如下:

第一段代码:

def create_new(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST)
        form.id_author = request.user.id
        if form.is_valid():
            form.save()
            return redirect('home')
    return render(request, 'main/create_new.html')

第二段代码:

def create_new(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST)
        if form.is_valid():
             article = form.save(commit=False)
             article.author = request.user
             article.save()
             return redirect('home')
    return render(request, 'main/create_new.html')

这种修改不可行,原因很明确:

  • 第一段代码的逻辑存在本质错误:你直接给表单对象form赋值form.id_author = request.user.id,但Django的表单对象并不会把这种手动添加的属性传递给模型。当执行form.save()时,只会处理表单类中定义的字段数据,你加的id_author属性完全不会被识别,最终会导致模型的关联字段(author或id_author)缺失必填值,触发数据库验证报错。

  • 第二段代码是Django中处理「表单提交后补充模型字段数据」场景的标准正确写法:

    • form.save(commit=False)会创建一个未保存到数据库的模型实例article,此时可以自由修改实例的字段
    • 直接给模型实例的author字段赋值为当前用户request.user,这是直接操作模型对象,数据会被正确识别
    • 最后调用article.save()完成数据入库,能确保用户关联关系正确建立

如果非要基于第一段代码的思路调整,你需要修改ArticleForm类:要么添加author(或id_author)为隐藏字段,要么在表单的save方法中处理用户关联,但这种做法既冗余又容易出错,远不如第二段代码的写法简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:10:35