如何在Django中编辑用户配置文件



我正试图在前台创建一个"编辑配置文件"表单。发生的情况是,我的表单(我不能100%确定(试图创建一个用户,而不是找到当前用户并更新他的个人资料。所以我认为这就是问题所在。检查了很多问题,但没有一个足够清楚。我试图编辑的字段是电子邮件(如果电子邮件已经存在,则需要检查(、名称、用户类型和密码。

下面是forms.py 的代码

class ProfileForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('full_name', 'active', 'admin','email','user_type')
def clean_password2(self):
# Check that the two password entries match
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return password2
def save(self, commit=True):
# Save the provided password in hashed format
user = super(ProfileForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
# user.active = False # send confirmation email
if commit:
user.save()
return user

视图代码.py

def profile(request):
user = User.objects.filter(email = request.user)
# form = ProfileForm(user.values().first())
if request.method == 'POST' :
form = ProfileForm(request.POST)
if form.is_valid():
form.save(commit=True)
form = ProfileForm(user.values().first())
# print(user)
context = {
'object_list': user,
'form': form
}
return render(request, 'userpanel/profile.html',context)

提前感谢

您没有将instance参数传递给表单。如果没有实例,它将尝试创建新对象。应该是这样的:

form = ProfileForm(request.POST, instance=user)

此外,您不需要使用以下内容查询用户:user = User.objects.filter(email = request.user)。只需添加login_requred装饰器即可确保用户通过身份验证并使用request.user:

from django.contrib.auth.decorators import login_required
@login_required
def profile(request):
if request.method == 'POST' :
form = ProfileForm(request.POST, instance=request.user)

最新更新