2017-02-27 29 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

另一方面,这是一个很好的方法来做到这一点?似乎可能有更好的方法来创建视图。 –

相关问题