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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:06:03