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

Django中如何通过表单自动获取提交表单的用户

解决Django表单自动绑定当前登录用户的问题

问题根源

你当前的表单因为设置了fields = '__all__',把username外键字段渲染成了下拉框让用户选择;而排除该字段后,又没在视图里手动给字段赋值,导致后台该字段为空。

修复步骤

1. 修改表单文件(forms.py)

把username字段从表单中移除,不让用户看到和选择:

class Requestpaymentform(ModelForm):
    class Meta:
        model = Requestpayment
        # 只保留需要用户手动填写的字段,排除username
        fields = ['useremail', 'accountmail', 'accountphonenumber', 'coinsrequested']

2. 修改视图文件(views.py)

在表单验证通过后,手动将当前登录用户绑定到username字段,再保存到数据库:

@login_required(login_url='login')   
def redeemcoins(request):
    # 注意要实例化表单(加括号)
    form = Requestpaymentform()
    if request.method == 'POST':
        form = Requestpaymentform(request.POST)
        if form.is_valid():
             # 先暂存表单数据,不提交到数据库
             form_instance = form.save(commit=False)
             # 绑定当前登录用户到username字段
             form_instance.username = request.user
             # 可选:自动填充useremail,不用用户手动输入
             form_instance.useremail = request.user.email
             # 正式保存数据
             form_instance.save()
             return redirect('home')
    # GET请求时返回表单页面
    return render(request, '你的模板文件名.html', {'form': form})

额外优化建议

  • useremail字段可以直接从登录用户的email属性获取,不需要用户填写,可进一步从表单字段中移除,减少用户操作同时避免输入错误。
  • 模型中的username字段建议改名为user,更符合Django命名规范,避免和内置的username属性混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:10:40