ValueError at /register/ save() запрещена для предотвращения потери данных из-за несохраненного связанного объекта 'user'
Я создаю сайт на django, но моя регистрация не работает, когда я нажимаю submit, я сталкиваюсь с этой ошибкой Я устанавливаю профиль для пользователя, я не уверен, что это правильный способ, так что если есть лучшие способы сделать это, пожалуйста, прокомментируйте
ValueError at /register/
save() prohibited to prevent data loss due to unsaved related object 'user'.
Пожалуйста, помогите, я новичок и буду очень признателен за краткий ответ. Вот вид :
def register(request):
profiles = UserProfilePage()
forms = CreateUser()
if request.method == 'POST':
profiles = UserProfilePage(request.POST, request.FILES)
forms = CreateUser(request.POST)
if forms.is_valid() and profiles.is_valid():
user = forms.save()
profile = profiles.save(commit=False)
profile.user = user
profile.save()
group = Group.objects.get(name='user')
user.groups.add(group)
username = forms.cleaned_data.get('username')
password = request.POST.get('password1')
user = authenticate(request, username=username, password=password)
login(request, user)
messages.success(request, 'Account was successfully created for ' + username)
return redirect('Login_Page')
ctx = {
'forms': forms,
'profiles': profiles,
}
return render(request, 'Register.html', ctx)
Формы:
class CreateUser(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
fields = ['username', 'email', 'password1', 'password2']
help_texts = {
'username': 'This is your identification value so it must be unique'
}
def __init__(self, *args, **kwargs):
super(CreateUser, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs['class'] = 'form-control'
self.fields['email'].widget.attrs['class'] = 'form-control'
self.fields['password1'].widget.attrs['class'] = 'form-control'
self.fields['password2'].widget.attrs['class'] = 'form-control'
def save(self, commit=True):
user = super().save(commit=False)
if not commit:
user.save()
return user
class UserProfilePage(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['Nick_Name', 'Profile_pic']
help_texts = {
'Nick_Name': 'This will act as your display name',
}
Profile_pic = CloudinaryFileField(
options={
'folder': 'Profile/'
})
def __init__(self, *args, **kwargs):
super(UserProfilePage, self).__init__(*args, **kwargs)
self.fields['Nick_Name'].widget.attrs['class'] = 'form-control'
self.fields['Profile_pic'].widget.attrs['onchange'] = 'profile(event)'
self.fields['Profile_pic'].widget.attrs['class'] = 'form-control'
Модели:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
date_created = models.DateTimeField(auto_now_add=True)
Nick_Name = models.CharField(default="Hey", max_length=250)
Profile_pic = CloudinaryField('Profile_Pic', default="")
def __str__(self):
return self.user.username