Djangoの新機能です.Djangoのユーザーモデルとユーザー作成フォームを使用してユーザー登録を作成しています。私は余分なフィールド会社名を含めることができるようにDjangoの組み込みユーザーモデルを拡張しようとしています。私はこの繰り返しエラーが発生しました。この問題を解決しようとすると本当に助けに感謝します。RelatedObjectDoesNotExistユーザーにはプロファイルがありません
RelatedObjectDoesNotExistユーザーにはプロファイルを持っていない
(1)ここでProfileモデルの私のModel.pyある
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Company_name = models.CharField(max_length=30)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
(2)ここに私のviews.py.Iを更新しようとしていますです私は新しいユーザーインスタンスが作成されるたびにプロファイルモデルを作成します。私はcreate_user_profile関数とsave_user_profile関数を自分のビューにリンクする必要があるようですが、これを行う方法があまりにもわかりません。
def Register(request):
if request.method == 'POST':
User_form = RegisterRecruiterForm(request.POST, instance=request.user)
Profile_form = ProfileForm(request.POST, instance=request.user.profile)
if User_form.is_valid() and Profile_form. is_valid():
User_form.save()
Profile_form.save()
return HttpResponse('you are now registered')
else:
User_form = RegisterRecruiterForm(instance=request.user)
Profile_form = ProfileForm(instance=request.user.profile)
return render(request, 'Register.html', {
'User_form': User_form,
'Profile_form': Profile_form
})
3.こちらは私のforms.pyです。
class RegisterRecruiterForm(UserCreationForm):
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def save(self, commit=True):
user = super(RegisterRecruiterForm, self).save(commit=False)
user.email(self.cleaned_data["email"])
user.username(self.cleaned_data["username "])
user.password(self.cleaned_data["password1 "])
user.password(self.cleaned_data["password2 "])
if user.password1 != user.password2:
raise forms.validationError("Password do not match")
return Profile.Company_name
if commit:
user.save()
return user
class ProfileForm(forms.ModelForm):
Company_name = forms.CharField(max_length=10,help_text='Required')
class Meta:
model = Profile
fields = ('Company_name',)
def save(self, commit=True):
Profile = super(ProfileForm, self).save(commit=False)
Profile.Company_name(self.cleaned_data["Company_name"])
if commit:
Profile.save()
return Profile
してください、それはあなたのために働くなら、私に知らせてください。 – Nazkter
- あなたの答えはありがたいですが、変更を加える必要がある場所を教えてください。Profile_form = ProfileForm(request.POST、instance = profile) (views) –
あなたのview.pyファイルで、 "Profile_form = ProfileForm(request.POST、instance = request.user.profile)"という行を私の答えのものに置き換えてください。 – Nazkter