1

1.4x 메소드를 사용하여 사용자 정의 "프로파일"모델을 추가하고이를 사용자 save/create에 인스턴스화하여 사용자 객체를 확장했습니다. 등록 과정에서 프로필 모델에 추가 정보를 추가하고 싶습니다. 뷰가 성공적으로 렌더링되지만 프로파일 모델은 저장하지 않습니다. 아래 코드 :장고에서 사용자 생성 후 사용자 프로파일 업데이트

user = User.objects.create_user(request.POST['username'], request.POST['email'], request.POST['password']) 
    user.save() 

    profile = user.get_profile() 
    profile.title = request.POST['title'] 
    profile.birthday = request.POST['birthday'] 

    profile.save() 
+1

괜찮습니다. 선택 사항입니다. – catherine

+0

안녕 캐서린, 미안. 먼저 감사의 말을 했어야했다. 당신의 대답에 감사드립니다. 나는 완전히 request.user 메소드를 사용할 것이지만, 프로파일에 대한 변경과 동일한 기능으로 사용자를 등록 할 것이기 때문에 요청 오브젝트를 사용하면 작동하지 않을 것이다. –

+0

다른 방법으로 호출하지 않는 이유는'profile = Profile (user = user)' – catherine

답변

1

사용자는 사용자 모델의 인스턴스입니다. 이미 존재하는 인스턴스를 얻으려는 것 같습니다. 그것은 당신이 user.get_profile에서 반환하는 것에 달려 있습니다. UserProfile 인스턴스를 시작해야합니다. 간단한 방법은 다음과 같이 될 수있다 :

user_profile = UserProfile.objects.create(user=user) 
user_profile.title = request.POST['title'] 
... 
. 
. 
user_profile.save() 
6

갱신이 코드는 이제 자동 것이다

user.save()

을 수행 할 때

from django.db.models.signals import post_save 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     profile, created = UserProfile.objects.get_or_create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

와 models.py 프로필 개체를 만듭니다. 그럼 당신은 할 수있어

그것이 도움이되기를 바란다.

+0

답장을 보내 주셔서 감사합니다. 정말 도움이되었습니다. :) 그것에 대해 두 가지 질문이 있습니다 : 1)'profile, created = UserProfile.objects.get_or_create (user = instance)'에서'profile '에 함수를 할당한다고 생각합니다. 왜냐하면 나중에'user .profile.title = request.POST [ 'title']'. 옳은? 그럼 왜 '창조'가 필요한거야? 그리고 2) 연결 부분에서'post_save.connect (create_user_profile, sender = User, weak = False)'와 같이'weak = False'가 필요하지 않아야합니까? 감사! – ferrangb

+0

get_or_create() 함수가 다음과 같은 객체가 아닌 튜플을 반환하기 때문에 만들어야합니다. object, True = get_or_create() – debuggerpk

관련 문제