【发布时间】:2018-12-14 09:00:02
【问题描述】:
我正在使用 Django 的内置身份验证来管理社交媒体网站上的用户。我正在使用一对一的关系将配置文件附加到每个用户。我可以使用 UpdateView 更新我附加的配置文件的所有部分。但是我不知道如何使用 Django 的内置用户来做到这一点。所以我创建了一个使用 _meta 类的表单。我已经到了我的表单将添加一个新用户而不是更新当前用户的地步。我希望你们中的一个可以帮助我修复我的代码。提前感谢您提供的任何帮助
views.py
class PrivProfileUpdate(View):
form_class = UserUpdateForm
template_name = 'user/user_form.html'
#display a blank form
def get(self, request, pk):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
#proces form data
def post(self, request, pk):
form = self.form_class(request.POST)
user = User.objects.get(pk=pk)
if form.is_valid():
user = form.save(commit=True)
print("we are trying to save")
#cleaned (normalized) data
username = form.cleaned_data['username']
password = form.cleaned_data['password']
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
email = form.cleaned_data['email']
user.set_password(password) #this is the only way to change a password because of hashing
user.save()
return render(request, self.template_name,{'form': form})
forms.py
class UserUpdateForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'email', 'password', 'first_name', 'last_name']
解决方案:
在views.py中
class PrivProfileUpdate(UpdateView):
model = User
form_class = UserUpdateForm
template_name = 'user/user_form.html'
def form_valid(self, form):
user = form.save(commit=True)
password = form.cleaned_data['password']
user.set_password(password)
user.save()
return redirect('user:index')
【问题讨论】:
标签: django python-3.x django-models django-forms django-views