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

如何在Django ModelForm中预填充用户名字段?

解决方案

要实现已登录用户填写表单时自动预填充登录用户名,只需修改视图中表单的初始化逻辑,具体步骤如下:

1. 修改views.py中的user视图

在GET请求初始化表单时,通过initial参数传入当前登录用户的用户名:

@login_required(login_url="signin")
def user(request):
    if request.method == "POST":
        form = Userdetail(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.save()
            messages.success(request, "You Have Successfully updated your details")
            return render(request, "thanks.html")
    else:
        # 初始化表单时传入当前登录用户的用户名
        form = Userdetail(initial={'username': request.user.username})
    return render(request, "accounts/User details.html", {"form": form})

2. 可选:设置用户名字段不可修改(推荐)

如果不希望用户修改预填充的用户名,可以在forms.py的Userdetail表单中给username字段添加disabled属性,同时在clean方法中保留该字段值:

class Userdetail(forms.ModelForm):
    class Meta:
        model = User_detail
        fields = "__all__"
        widgets = {
            # 其他widget配置保持不变
            'username':forms.TextInput(attrs={
                'placeholder': 'Enter Your Username',
                'disabled': 'disabled'  # 添加禁用属性
            }),
        }
    
    def clean_username(self):
        # 确保保存时能获取到用户名(禁用字段不会自动提交)
        return request.user.username

完成以上修改后,已登录用户打开表单时,用户名字段会自动填充其登录用户名,若添加了禁用属性则无法修改该字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:30:59