Как реализовать страницу редактирования профиля?
Я пытаюсь сделать свой вид для редактирования профиля, но он не работает при сохранении данных, я не знаю, что я делаю неправильно, если он должен работать как обычная форма, правильно? Форму можно увидеть в моем шаблоне, проблема в том, что при сохранении она ничего не сохраняет
views.py
def EditProfilePageView(request):
# dictionary for initial data with
# field names as keys
context = {}
# add the dictionary during initialization
form = RegisterForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('profile')
context['form'] = form
return render(request, 'Usuarios/edit-profile.html', context)
form.py
class RegisterForm(UserCreationForm):
username=forms.CharField(label="Usuario",widget=forms.TextInput(attrs={'class': 'form-control'}))
email=forms.EmailField(widget=forms.TextInput(attrs={'class': 'form-control'}))
phone1=forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
phone2=forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
fax = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
email = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
website = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
socialMedia1 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
socialMedia2 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
socialMedia3 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
alternativeContact = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
country = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
address = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
city = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
state = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
zip = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
password1 = forms.CharField(
label="Contraseña",
widget=forms.PasswordInput(attrs={'class':'form-control', 'type':'password', 'align':'center'}),
)
password2 = forms.CharField(
label="Confirma Contraseña",
widget=forms.PasswordInput(attrs={'class':'form-control', 'type':'password', 'align':'center'}),
)
class Meta:
model=User
fields=['phone1','phone2','fax','email','website','socialMedia1','socialMedia2',
'alternativeContact','country','address','city','state','zip']
widgets = {
'password': forms.TextInput(attrs={'class': 'form-control'}),
}
Плохая новость, вы не можете использовать модель UserCreationForm для сохранения пользовательских полей, таких как город, зип, ...и т.д.
модель UserCreationForm разработана для работы с обычными полями модели User, встроенными в Django, такими как:
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2', )
Поэтому вы не можете создать или поместить дополнительные поля на нем, что означает, что за сценой форма в представлении не получит остальные поля, которые вы добавили, что вызовет ошибку для некоторых обязательных полей, потому что вы пытались добавить нулевые данные для обязательного поля. даже если вы добавили данные в эти поля, но эти поля не будут добавлены в форму.
тогда вы можете отказаться от работы с моделью UserCreationForm, вы можете настроить свои собственные формы с помощью ModelForm для достижения вашей цели