如何在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
相关产品推荐
相关产品推荐

