无法将表单数据保存至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
相关产品推荐
相关产品推荐

