2017-02-27 84 views
0

嗨已經改變了我的看法,從這樣的: How to make User able to create own account with OneToOne link to Profile - DjangoDjango的 - 用戶創建用戶和配置文件中相同的形式

出於某種原因,profile_form不保存「用戶信息到數據庫中。我檢查了print(profile_form.user)數據中的信息,並在終端中顯示用戶名。然而,它並不是將這個外鍵保存到數據庫中,它只是將其保留爲空。

向該: 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

這可能是重複如下: http://stackoverflow.com/questions/26361142/update-user-and-user-profile-on-same-form –

+0

嗨,一個是用於更新配置文件,而不是創建一個。我希望用戶以相同的形式創建他們的用戶帳戶和個人資料 –

回答

2

用戶是實例的一個屬性,而不是表格。

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

是的!謝謝!我明白!我有另一種形式也是這樣做的。不能爲我的生活看到差異。 –

+0

另一方面,這是一個很好的方法來做到這一點?似乎可能有更好的方法來創建視圖。 –

相關問題