Форма профиля частично не сохранена
После первой регистрации происходит переход на новую форму - можно ввести email профиля, фото, био, ссылки на twitter, github и другие социальные сети, участвуют 2 модели: ProfileUser и User. Когда человек написал что хотел и нажал на кнопку, после перехода он нажал на пользователя и его перекинуло на страницу профиля, но там кроме почты ничего из ранее введенного не отображается , при попытке изменить профиль тоже ничего не отображается, в форме ничего нет, зашел в админ панель в модели, только пользователь тоже устанавливается автоматически при переходе на создание профиля после регистрации, остальные данные просто не вводятся, подскажите пожалуйста как это исправить
Пользователь представляется мне, потому что это есть в регистрации
profile = ProfileUser.objects.create(user=new_user)
Я пытался переделать его согласно этой статьене получилось
models.py
class ProfileUser(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)
img = models.ImageField(null=True, blank=True, upload_to='static/images/', validators=[img__size])
birthday = models.DateField(blank=True, null=True)
about = models.TextField(max_length=1000, null=True)
#? social media
twitter = models.URLField(null=True, blank=True)
facebook = models.URLField(null=True, blank=True)
instagram = models.URLField(null=True, blank=True)
telegram = models.URLField(null=True, blank=True)
vk = models.URLField(null=True, blank=True)
reddit = models.URLField(null=True, blank=True)
github = models.URLField(null=True, blank=True)
def __str__(self):
return 'Profile for user {}'.format(self.user.username)
forms.py
class UserEditForm(ModelForm):
class Meta:
model = User
fields = ['email']
class ProfileEditForm(ModelForm):
class Meta:
model = ProfileUser
fields = ['birthday', 'img', 'about', 'twitter', 'facebook','instagram', 'telegram','vk','reddit', 'github']
views.py Создайте профиль:
def createProfile(request):
UserForm = UserEditForm()
ProfileForm = ProfileEditForm()
if request.method == 'POST':
print(request.POST)
UserForm = UserEditForm(request.POST)
ProfileForm = ProfileEditForm(request.POST)
if ProfileForm.is_valid():
UserForm.save()
ProfileForm.save()
return redirect('base:home')
context = {'UserForm': UserForm,'ProfileForm': ProfileForm}
return render(request, 'base/profileForm.html', context)
Обновить профиль:
@login_required(login_url='base:login')
def updateProfile(request,pk):
user = User.objects.get(id=pk)
UserForm = UserEditForm(instance=user)
ProfileForm = ProfileEditForm(instance=user)
if request.method == 'POST':
ProfileForm = ProfileEditForm(request.POST,instance=user)
UserForm = UserEditForm(request.POST,instance=user)
if UserForm.is_valid():
UserForm.save()
ProfileForm.save()
return redirect('base:home')
context = {'user': user,'UserForm': UserForm,'ProfileForm': ProfileForm}
return render(request, 'base/profileForm.html', context)
profileForm.html
{% block content %}
<form class="login__form" method='POST' action="." enctype="multipart/form-data">
{% csrf_token %}
{{ProfileForm.media}}
{{UserForm.as_p}}
{{ProfileForm.as_p}}
<input type="submit" class="btn btn-min" value="Сохранить">
</form>
{% endblock content %}
Вам нужно будет передать экземпляр ProfileUser
, соответствующий пользователю, в ProfileEditForm
в updateProfile
.
ProfileForm = ProfileEditForm(instance=user.profileuser)