2014-10-14 3 views
0

일부 추가 사용자 정보를 위해 userProfile을 만들었습니다. 여기 내 모델 :동일한 양식의 사용자 및 사용자 프로필 업데이트

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    picture = models.ImageField(upload_to=get_upload_path, blank=True) 

    def __unicode__(self): 
     return self.user.username 

def create_user_profile(sender, **kwargs): 
    u = kwargs["instance"] 
    if not UserProfile.objects.filter(user=u): 
     UserProfile(user=u).save() 

post_save.connect(create_user_profile, sender=User) 

설정 페이지가 필요하며이 페이지에서 사용자 및 사용자 프로필 필드의 일부 필드를 동시에 업데이트합니다. 여기 내 양식 :

class UpdateUserForm(ModelForm): 
    class Meta: 
     model = User 
     fields = ['first_name', 'last_name'] 

class UpdateUserProfileForm(ModelForm): 
    class Meta: 
     model = UserProfile 
     exclude = ['user'] 

난 내 템플릿의 한 형태를 가지고 관련 기능은 다음과 같습니다 내가 오류 "열 USER_ID이 고유하지"무엇입니까이 경우

def post(self, request, *args, **kwargs): 
    update_user_form = UpdateUserForm(data=request.POST, instance=request.user) 
    update_user_profile_form = UpdateUserProfileForm(data=request.POST) 
    if update_user_form.is_valid() and update_user_profile_form.is_valid(): 
     user = update_user_form.save() 
     userProfile = update_user_profile_form.save(commit=False) 
     userProfile.user = user 
     userProfile.save() 

. 왜이 사용자와 새 사용자 프로필을 추가하려고합니까?

이 경우 가장 좋은 방법은 무엇입니까?

고마워요.

+0

제거'create_user_profile' 기능과'post_save.connect (create_user_profile 송신자 = 사용자)'. –

+0

이 경우 새 사용자를 만들 때 어떻게 사용자 프로필을 만들 수 있습니까? –

+0

이 함수의 마지막 줄에'def post'에'userProfile'을 만듭니다. –

답변

0

이전에도 같은 문제가있었습니다.

models.py :

class CustomUser(AbstractUser): 
    picture = models.ImageField(upload_to=get_upload_path, blank=True) 
대신 onetoonefield를 사용하여 사용자에게 링크의 : 결국 나는 ( https://docs.djangoproject.com/en/dev/topics/auth/customizing/이 여기에 더 많은 정보를) AbstractUser에서 상속 할 내 사용자 지정 사용자 모델을 변경하기로

views.py :

class UpdateUser(LoginRequiredMixin, UpdateView): 
    model = CustomUser 
    fields = ('first_name', 'last_name', 'picture') 
    template_name = 'user/edit.html' 
    success_url = reverse_lazy('forum:top') 
관련 문제