2012-06-24 3 views
1

그래서 나는 django에서 일반적인 "accounts"페이지를 만들고 있습니다. 장고 등록 플러그인을 사용했고, 현재 (djang-standard) User 객체와 UserProfile 및 UserProfileForm 객체를 가지고 있습니다.django edit user와 userprofile 객체

이것은 스타일이나 모범 사례에 대한 질문입니다. 내가 "옳은"계획을 세우고 있거나 이것을 수행하는 "더 나은/추천/표준 방법"이 있습니까?

무엇 내가 request.user의 예에서 사용자 프로필 만드는 일을 계획입니다 :

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 

    def __init__(self,*args,**kwargs): 
     super(UserProfileForm, self).__init__(*args, **kwargs) 
     if kwargs.has_key('instance'): 
      self.user = kwargs['instance'] 
:

form = UserProfileForm(instance=User) 

을 (그리고보기에 그 형태를 전송) 및 UserProfileForm에서 내 USERPROFILE 거의 그렇게 같다

:

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    points = models.IntegerField(default=0) #how is the user going with scores? 

및 사용자는의입니다다양한.

편집 및 저장 처리 중 하나를 mixin django 물건을 통해 수행됩니다 또는 더 많은 가능성이 있기 때문에 내가 게시물을 가져오고 가져옵니다 핸들을 내 자신의 사용자 정의보기를 mixins 읽었습니다. 그러나 믹스 인을 사용해야한다고 확신하기 때문에 위의 "맞습니까?" 또는 제안이 있습니까?

건배!

답변

1

user profiles on the django docs을 살펴보면 기본 사항이 나와 있습니다. using a form in a view도 살펴보아야합니다.

일부 특정 피드백 :

  • 당신은 USERPROFILE 모델 권리를 가지고,하지만 당신은 어느 하나의 관리 인터페이스를 통해 또는 프로그래밍 (하나의 인스턴스에 새로운 사용자가 추가 될 때마다 만들 필요가 당신의 보기). 당신은 사용자 post_save 신호로 등록하여이 작업을 수행 :

    def create_user_profile(sender, instance, created, **kwargs): 
        if created: 
         UserProfile.objects.create(user=instance) 
    post_save.connect(create_user_profile, sender=User) 
    
  • 당신은 UserProfile하지 User의 인스턴스로 ModelForm init을해야한다. request.user.get_profile()으로 현재 사용자 프로파일을 얻을 수 있습니다 (settings.py에 AUTH_PROFILE_MODULE을 정의한 경우). 귀하의 견해는 다음과 같이 보일 수 있습니다

    def editprofile(request): 
        user_profile = request.user.get_profile() 
        if request.method == 'POST': 
         form = UserProfileForm(request.POST, instance=user_profile) 
         if form.is_valid(): 
          form.save() 
          return HttpResponseRedirect('/accounts/profile') 
        else: 
         form = UserProfileForm(instance=user_profile) 
        # ... 
    
  • 당신의 ModelForm의 초기화 재정에 대한 필요가 없습니다. 당신은 어쨌든 UserProfile 인스턴스로 호출 할 것입니다.

    user = User() 
    user.save() 
    form = UserProfileForm(instance = user.get_profile()) 
    # ... 
    
참고로 오늘, AUTH_PROFILE_MODULE의 같은
+0

및 get_profile가 사용되지 않습니다 : 새 사용자를 만들려면, 단지 사용자 생성자를 호출 – Jay

관련 문제