2017-02-27 2 views
0

Hallo habe meine Ansicht von dieser geändert: How to make User able to create own account with OneToOne link to Profile - DjangoDjango - Der Benutzer erstellt und Benutzerprofil in derselben Form

Aus irgendeinem Grunde die profile_form nicht die ‚Benutzer‘ Informationen über die Datenbank zu speichern. Ich habe die Informationen in den print (profile_form.user) Daten überprüft und zeigt den Benutzernamen im Terminal. Es speichert diesen Fremdschlüssel jedoch nicht in der Datenbank, sondern lässt ihn einfach Null.

Um dies: Views.py

class IndexView(View): 
    template_name = 'homepage.html' 
    form = UserCreationForm 
    profile_form = ProfileForm 

    def post(self, request): 
     user_form = self.form(request.POST) 
     profile_form = self.profile_form(request.POST) 
     if user_form.is_valid() and profile_form.is_valid(): 
      user = user_form.save() 
      profile_form.save(commit=False) 
      profile_form.user = user 
      print(profile_form.user) 
      print(profile_form) 
      profile_form.save() 

      return render(request, self.template_name) 
     else: 
      return render(request, self.template_name, {'user_form': self.form, 
                 'profile_form': self.profile_form}) 

    def get(self, request): 
     if self.request.user.is_authenticated(): 
      return render(request, self.template_name) 
     else: 
      return render(request, self.template_name, {'user_form': self.form, 'profile_form': self.profile_form}) 

Forms.py

class ProfileForm(ModelForm): 
    """ 
    A form used to create the profile details of a user. 
    """ 
    class Meta: 
     model = Profile 
     fields = ['organisation', 'occupation', 'location', 'bio'] 

Models.py

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True) 
    organisation = models.CharField(max_length=100, blank=True) 
    occupation = models.CharField(max_length=100, blank=True) 
    bio = models.TextField(max_length=500, blank=True) 
    location = models.CharField(max_length=30, blank=True) 
+0

Es könnte sein Duplikat der folgenden: http://stackoverflow.com/questions/26361142/update-user-and-user-profile-on-same-form –

+0

Hallo, dass man ein für die Aktualisierung Profil, nicht eins zu erstellen. Ich möchte, dass der Benutzer sein Benutzerkonto und sein Profil in der gleichen Form erstellt –

Antwort

2

Der Benutzer ist ein Attribut der Instanz, nicht die Form.

user = user_form.save() 
    profile = profile_form.save(commit=False) 
    profile.user = user 
    print(profile.user) 
    profile.save() 
+0

Ja! Vielen Dank! Ich verstehe! Ich hatte eine andere Form, die dasselbe tat. Konnte nicht für das Leben von mir den Unterschied sehen. –

+0

Auf eine andere Anmerkung ist dies eine gute Möglichkeit, dies zu tun? Es scheint, als könnte es eine bessere Möglichkeit geben, die Ansicht zu erstellen. –

Verwandte Themen