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

无法将表单数据保存至Model数据库?如何为Listing关联当前用户

解决方案

先明确两个错误的核心原因:

  • 直接赋值User类给外键字段:外键要求的是User实例,不是类本身,因此触发第一个ValueError。
  • 新建User()实例但未保存:这个空用户对象还没存入数据库,Django禁止关联未持久化的关联对象,所以出现第二个错误。而且这也不是你需要的「当前操作的用户」,只是一个无意义的新用户。

正确的做法是直接使用当前登录的用户实例——request.user:

修改views.py中的代码:

from django.contrib.auth.decorators import login_required

@login_required  # 强制用户登录后才能访问,避免匿名用户导致的赋值失败
def save_new(request):
    if request.method == 'POST':
        form = NewListing(request.POST)
        if form.is_valid():
            obj = Listing()
            ...
            obj.user = request.user  # 赋值当前登录的用户实例
            obj.save()
            return HttpResponseRedirect('/')

补充优化:

如果你的NewListing是继承自ModelForm的表单类,可以用更简洁的写法:

@login_required
def save_new(request):
    if request.method == 'POST':
        form = NewListing(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)  # 先不保存到数据库
            obj.user = request.user
            obj.save()  # 最终完成保存
            return HttpResponseRedirect('/')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:22