2017-02-27 4 views
0

안녕하세요, 사용자 및 프로필을 생성이에서 내 시야를 변경 : How to make User able to create own account with OneToOne link to Profile - Django장고 - 사용자와 동일한 형태

profile_form가 데이터베이스에 '사용자 정보를 저장하지 않는 몇 가지 이유. print (profile_form.user) 데이터의 정보를 확인하고 터미널에 사용자 이름을 표시합니다. 그러나이 외래 키를 데이터베이스에 저장하는 것이 아니라 Null로 남겨 둡니다. 이에

: 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

또 다른 메모는 이것을 수행하는 좋은 방법입니까? 보기를 만드는 더 좋은 방법이있는 것처럼 보입니다. –