Ich bin neu in Django.Ich erstelle eine Benutzerregistrierung mit dem integrierten Django-Benutzermodell und UserCreation-Formular. Ich versuche, das eingebaute Benutzermodell in Django zu erweitern, also kann ich einen zusätzlichen Feldfirmennamen einschließen. Ich stoße auf diesen wiederkehrenden Fehler unten. Ich würde wirklich jede Hilfe schätzen, wenn ich versuche, dieses Problem zu lösen.RelatedObjectDoesNotExist Benutzer hat kein Profil
RelatedObjectDoesNotExist Benutzer haben kein Profil
(1) Hier ist mein Model.py des Profils Modells
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.) Hier ist mein views.py.I die aktualisieren versucht Profilmodell jedes Mal, wenn eine neue Benutzerinstanz erstellt wird. Es scheint, als ob ich die Funktionen create_user_profile und save_user_profile mit meiner Ansicht verknüpfen muss, aber ich bin mir nicht sicher, wie das geht.
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.Hier ist meine 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
Bitte, lassen Sie mich wissen, ob es für Sie arbeitet. – Nazkter
- Nazkter danke für deine Antwort, aber könntest du bitte angeben, wo ich die Änderungen vornehmen muss profile = profile.objects.get (user = request.user) (model) Profile_form = ProfileForm (request.POST, instance = profile) (views) –
Ersetzen Sie in Ihrer view.py-Datei die Zeile "Profile_form = ProfileForm (request.POST, instance = request.user.profile)" durch die in meiner Antwort. – Nazkter