Я использую встроенную аутентификацию 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')