1

"이메일"과 같은 추가 필드를 사용하여 UserCreationForm을 확장하는 방법에 대해이 post을 찾았습니다. 그러나 전자 메일 필드는 미리 작성된 사용자 모델에 이미 정의되어 있습니다.UserProfile의 필드를 사용하여 UserCreationForm을 확장하는 방법

Django의 사전 빌드 된 User 클래스를 확장하는 추가 모델 (UserProfile이라고 함)을 만들었습니다. UserProfile에서 정의한 필드를 UserCreationForm에 표시하려면 어떻게합니까?

답변

8

는 만들고 오버 쟁이 save() 기능에 새로운 UserProfile 인스턴스를 저장 (그것은 불행하게도 자신을 반복 피하기 위해 ModelForm를 사용하기 너무 쉬운 일이 아닙니다) 당신의 UserProfile 모델에 맞게 필드를 추가합니다. 링크 된 게시물에서 변경 :

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 


class UserCreateForm(UserCreationForm): 
    job_title = forms.CharField(max_length=100, required=True) 
    age = forms.IntegerField(required=True) 

    class Meta: 
     model = User 

    def save(self, commit=True): 
     if not commit: 
      raise NotImplementedError("Can't create User and UserProfile without database save") 
     user = super(UserCreateForm, self).save(commit=True) 
     user_profile = UserProfile(user=user, job_title=self.cleaned_data['job_title'], 
      age=self.cleaned_data['age']) 
     user_profile.save() 
     return user, user_profile 
+0

감사합니다! job_title과 age는 UserProfile 권한에 정의 된 필드입니까? 우리는 UserProfile이 외래 키를 통해 사용자에게 연결되어 있다는 것을 알고 있습니다. User와 같은 모델에 대해 Model Form을 생성하면 User 외래 키의 필드도 Form에 사용할 수 있습니까? – goelv

+1

'job_title'과'age'는'UserProfile' 모델의 허수의 필드였습니다. 핵심은 원하는 필드를'ModelForm'에 추가 할 수 있다는 것입니다. 'Meta '에 명시된 모델과 관련이없는 것들은 무시되며, 그것들을 처리하는 것은 당신에게 달려있다. 그게 내 제안 된 코드 ('self.cleaned_data'에서 값을 꺼내는 것)입니다. – supervacuo

+1

* ie * 필드가'UserProfile'의 모델 필드가 아니더라도 계속 추가하면됩니다. 여기에'save()'에 의미있는 것이 있습니다. 여기에'UserProfile'에 특별한 것은 없습니다. – supervacuo