Django如何获取当前登录用户名并自动赋值给表单指定字段?
解决方案
你需要修改3处代码即可实现需求:
1. 调整表单字段(forms.py)
你不需要让用户手动填写/选择关联用户,所以将name字段从表单的可写字段中移除:
from django import forms from .models import Borrow class BorrowForm(forms.ModelForm): class Meta: model = Borrow # 仅保留需要用户手动填写的字段 fields = ('book', 'period')
2. 修正视图赋值逻辑(views.py)
你之前的代码有两处核心错误:
- 你模型中关联用户的字段名为
name,而非不存在的user字段 - 该字段是关联
User表的外键,需要赋值User实例,不能只传用户名字符串
修改后的代码如下:
@login_required def borrowing(request): momo = BorrowForm() if request.method == 'POST': momo = BorrowForm(request.POST) if momo.is_valid(): instance = momo.save(commit=False) # 给正确的字段赋值当前登录的用户对象 instance.name = request.user instance.save() return redirect('profile') return render(request, 'books/book.html', {'momo': momo})
错误原因说明
- 原代码表单包含
name字段,如果你前端页面没有给这个字段传值,提交的表单数据中该字段为空,会直接覆盖后续赋值逻辑 - 原代码给不存在的
user属性赋值,模型的name字段从未被修改,因此存储后始终为空 - 若错误赋值
request.user.username字符串,外键字段需要接收User实例,会触发类型错误无法保存
内容的提问来源于stack exchange,提问作者Ahmed Halim
相关产品推荐
相关产品推荐

