2017-05-09 27 views
1

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 

Antwort

1

Wie ich Ihr Problem sehen kann, ist, dass Sie in dieser Zeile zu bekommen "request.user.profile" versuchen:

Profile_form = ProfileForm(request.POST, instance=request.user.profile) 

In Ihren Modellen der "User" hat nicht ein „Profil“, sondern ein „Profil“ hat einen „User“, so der richtige Weg, um dieses Profil zu bekommen ist:

profile = Profile.objects.get(user = request.user) 
Profile_form = ProfileForm(request.POST, instance = profile) 

dieses Ihr Problem mit dem „RelatedObjectDoesNotExist“ Fehler beheben. Wenn Sie einen anderen Fehler haben, können Sie eine neue Frage öffnen.

Schließlich Sie "Register" Funktion wird:

def Register(request): 
    if request.method == 'POST': 
     User_form = RegisterRecruiterForm(request.POST, instance=request.user) 
     profile = Profile.objects.get(user = request.user) 
     Profile_form = ProfileForm(request.POST, instance = 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 = Profile.objects.get(user = request.user) 
     Profile_form = ProfileForm(request.POST, instance = profile) 
    return render(request, 'Register.html', { 
     'User_form': User_form, 
     'Profile_form': Profile_form 

     }) 
+0

Bitte, lassen Sie mich wissen, ob es für Sie arbeitet. – Nazkter

+0

- 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) –

+0

Ersetzen Sie in Ihrer view.py-Datei die Zeile "Profile_form = ProfileForm (request.POST, instance = request.user.profile)" durch die in meiner Antwort. – Nazkter

Verwandte Themen