save() prohibited to prevent data loss due to unsaved related object 'user'. в чем ошибка?
для редактирования пользователя добавил модель Profile которая связана с моделью пользователя, при регистрации пользователя получаю ошибку save() prohibited to prevent data loss due to unsaved related object 'user' , если переношу сохранение объекта а потом создание объекта Profile , оно регистрирует , но видимо не сохраняет что-то в базу данных , т.к при попытке войти пишет что такоего юзера нет . По идее ошибка в функции регистрации , буду признателен за подсказку где и как это правильно организовать.
views.py
def register(request):
if request.method == 'POST':
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(user_form.cleaned_data['password'])
Profile.objects.create(user=new_user)
new_user.save()
#vnew_profile = Profile.objects.create(user=new_user)
# new_profile.save()
return render(request, 'registration/register_done.html', {'new_user': new_user})
user_form = UserRegistrationForm()
return render(request, 'registration/register.html', {'user_form': user_form})
models.py
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
date_of_birth = models.DateField(blank=True, null=True)
photo = models.ImageField(upload_to='users/%Y/%m/%d', blank=True)
def __str__(self):
return 'Profile for user {}'.format(self.user.username)
forms.py
class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(label='password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'first_name', 'email')
def clean_password(self):
cd = self.cleaned_data
if 'password' in cd and 'password2' in cd and cd['password'] != cd['password2']:
raise forms.ValidationError('Bro passwords don\'t match , try again ;)')
return cd
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('date_of_birth', 'photo')