1

처리 할 다른 답변 (예 : Django-Registration & Django-Profile, using your own custom form)을 구현하는 데 어려움을 겪었지만 프로젝트가 너무 오래되었을 것 같아서이 작업을 처리하지 못했습니다.활성화 장고 등록시 추가 모델 만들기

기본적으로 내 프로젝트에 장고 등록을 설치했으며이를 통해 사용자를 인증하고 만들 수 있습니다.

그러나, 나는 다음과 같은 사용자 프로필 모델로 사용자를 확장 한 : 그 싶습니다

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    account_type = models.IntegerField(null = True, default= 1) 
    daily_message = models.BooleanField(default = True) 
    tel_number = models.CharField(max_length=20, null = True) 

    def __str__(self): 
     return str(self.user) 

그리고 다음 중 하나를 기본/널 (null) 값으로

  1. 사용자 프로필은 각 사용자 (생성됩니다 사용자가 나중에 업데이트 할 수 있습니다.)
  2. 사용자는 등록에 대한 기타 세부 사항이있는 전화 번호를 입력 할 수 있습니다.

다음 내 URLs.py에 매여 :

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^accounts/', include('registration.backends.hmac.urls')), 
    url(r'^', include('app.urls')) 
] 

내가 장고 등록 양식과 문서의 많은의 이상 가시성이없는 바와 같이 (사용자 정의 사용자 모델을 설명하는 나는 없다), 위의 방법 중 하나를 어떻게 수행 할 수있는 아이디어가 있습니까?

답변

2

이 작업을 달성 할 수있는 여러 가지 방법이 있습니다. 장고와 같은 방법은 신호에 의존하는 것입니다. 더 구체적으로는 user_registered 신호입니다.

registration.signals.user_registered 새 사용자 계정이 인 경우 전송됩니다. 다음 인수를 제공합니다.

발신자 RegistrationView 하위 클래스가 계정을 등록하는 데 사용됩니다.
사용자 새 계정을 나타내는 사용자 모델 인스턴스입니다.
요청 새 계정이 등록 된 HttpRequest.

def create_user_profile(sender, user, requet): 
    ''' 
    Creates a profile object for registered users via the 
    user_registered signal 
    ''' 

    obj = UserProfile.objects.get_or_create(user=user) 

대안은 RegistrationView 하위 클래스이다. 두 번째 방법은 사용자의 post_save 신호를 포착하는 것입니다.