2012-01-17 1 views
0

나는 문서를 읽고 내 모델에서 UserProfile 테이블을 설정하고 관리 영역의 User 테이블과 연결 한 다음 등록 할 때이 UserProfile 테이블에 내 사용자에 대한 추가 정보를 저장하려고합니다. 위 내 코드의 주석에서 볼 수 있듯이Django에서 User 테이블과 연결된 UserProfile 테이블에 어떻게 데이터를 저장할 수 있습니까?

from django.contrib.auth import authenticate, login, logout 


def register(request): 
    if request.method == 'POST': 
     query_dict = request.POST 
     username = query_dict.__getitem__("username") 
     email = query_dict.__getitem__("user_email") 
     password = query_dict.__getitem__("password") 
     repeat_password = query_dict.__getitem__("repeat_password") 
     role = query_dict.__getitem__("role") 
     user = User.objects.create_user(username, email, password) 
     # django.db.models.signals.post_save gets called here and creates the UserProfile 
     # I can write something like user_profile = user.get_profile() but I don't 
     # know how to save information to the profile. 
     user = authenticate(username=username, password=password) 

     if user is not None and user.is_active: 
      login(request, user) 
      return HttpResponseRedirect("/") 

, 나는 관련 USERPROFILE 객체를 검색 할 수 있습니다,하지만 난 거기에서 이동 위치를 모르는 : views.py에서

나는 다음과 같은 한 추가 데이터 (역할)를 UserProfile 테이블에 저장하십시오. 모든 문서는 나에게이 이야기 :

get_profile() 반환이 사용자에 대한 사이트 별 프로필을. django.contrib.auth.models.SiteProfileNotAvailable 현재 사이트에서 프로필을 허용하지 않는 경우 또는 django.core.exceptions.ObjectDoesNotExist 사용자에게 프로필이없는 경우 발생합니다. https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.get_profile

을하지만 문서는 어떤 종류의 객체 get_profile() 반환 말하지 않는, 또는 나는 USERPROFILE 테이블에 정보를 저장하는 데 사용할 수있는 방법 :

당신은 여기에서 볼 수 있습니다.

+0

왜 그 모든 '__getitem__'물건을하고 계십니까? 그냥'query_dict [ 'username']'등을 수행하면됩니다. 이중 밑줄 메소드를 직접 호출 할 필요는 거의 없습니다. –

+0

감사합니다. 나는 그것에 대해 궁금해하고 있었다. 이것은 Django의 첫 번째 주입니다. 그래서 나는 때로는 깊은 이해없이 맹목적으로 문서를 읽습니다. – Deonomo

답변

4

User.get_profile()AUTH_PROFILE_MODULE을 가지고있는 인스턴스를 반환합니다. 으로 설정해야합니다. "yourapp.UserProfile" (yourapp를 조정하십시오). 그럼 당신은 같은 것을 할 수 있어야한다 :

from yourapp.models import UserProfile 
profile = user.get_profile() 
assert isinstance(profile, UserProfile) 
profile.role = role 
profile.save() # saves to DB 

당신은 실제로 수입이 필요하거나 선을 주장하지 않습니다 - 그에게 당신을 위해 단지 UserProfile 당신이 그것을 것으로 기대 것을 정신 체크. 당신이 링크 된 페이지에서

+0

감사합니다. 흠, 너무 단순 해 보입니다 ... – Deonomo

1

:

는 "아래 추가 사용자 정보를 저장에 절을 참조하십시오.", 섹션, "AUTH_PROFILE_MODULE는"설정이 있음을 알려줍니다 그건 https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

를 참조하는 User.get_profile이 리턴 할 모델을 선언합니다.

사용자 개체를 만들 때마다 프로필 모델 인스턴스를 자동으로 만들려면 사용자 모델에서 post_save 신호 처리기를 설정하는 방법을 따르는 것이 좋습니다. 그렇게하지 않으면 User.get_profile()이 예외를 throw 할 수 있고 예외를 throw합니다.

+0

도움을 주셔서 감사합니다. post_save 신호 처리기를 설정해야합니다. – Deonomo