2014-06-19 2 views
0

내 django 프로젝트에서 사용자 프로필을 업데이트하기위한 페이지가 있습니다. 뷰 코드는 다음과 같습니다django의보기 코드에서 양식 속성을 업데이트하는 방법

내 양식은 다음과 같습니다
@login_required 
def updateProfile(request, user_id): 

    if request.method == 'POST': 
     form = UserProfileForm(request.POST) 

     if form.is_valid(): 
      form.user_id = user_id 
      form.save(commit=True) 
      return index(request) 

    else: 
     profile, created = UserProfile.objects.get_or_create(user_id = self.user_id) # don't know if this will actually work. 
     profile_form = UserProfileForm(profile) 
     context = { 
      'user' : request.user, 
      'form' : profile_form 
     } 
     return render(request, 'myapp/profile.html', context) 

:

내 사용자 프로필은 다음과 같습니다
class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ['age', 'skill_level'] 

이 게시됩니다

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    age = models.IntegerField(default=18) 
    skill_level = models.ForeignKey(SkillLevel) 

을에, 우리는받을 것 올바른 양식과 함께 유효한 user_id 인 것으로 보입니다. UserProfileForm 양식에는 user_id이 포함되어 있지 않으므로 렌더링 할 때 사용자가이를 바꿀 수 없도록합니다. 대신 user_id는 별도의 매개 변수로 게시됩니다 (이 매개 변수를 입력하면 이상하게 보입니다). 나는 에 의해 캡슐화 된 UserProfile을 게시 할 때 데이터베이스에 저장하려고하므로 user_id을 입력하고 을 반환하는 .save(commit=True)을 호출하려고합니다.

내 질문은 간단합니다. 폼 데이터에서 저장된 기본 UserProfile 객체를 정보와 함께 어떻게 얻을 수 있습니까?

+0

나에게 UserProfile 모델을 보여줄 수 있으며 프로필 업데이트 사용자가 로그인했는지 여부를 알려 주실 수 있습니까? – dhana

+0

@dhana UserProfile 모델을 추가했습니다. 나는 그 질문의 두 번째 부분을 이해하지 못한다. 사용자는 로그인해야합니다. – Jim

+0

예, 사용자 프로필을 업데이트 할 때? – dhana

답변

1

표준 장고 형태로 처리 관용구는 데이터를 형성

@login_required 
def updateProfile(request, user_id): 

    if request.method == 'POST': 
     form = UserProfileForm(request.POST) 

     if form.is_valid(): 
      obj = form.save(commit=False) # Get just object, but don't save yet 
      obj.user = request.user  # set user (or user_id) 
      obj.save()      # Save object 
      return index(request) 

    else: 
     profile, created = UserProfile.objects.get_or_create(user_id = self.user_id) # don't know if this will actually work. 
     profile_form = UserProfileForm(profile) 
     context = { 
      'user' : request.user, 
      'form' : profile_form 
     } 
     return render(request, 'myapp/profile.html', context) 

주이다이 방법을 수행 USERPROFILE 사용자의 request.user를 사용 form.my_field = 123은 작동하지 않습니다. 양식 데이터는 form.cleaned_data 사전 (form.save() 사전)으로 구문 분석됩니다.

+0

답변 해 주셔서 감사합니다. 이 솔루션에서 볼 수있는 유일한 문제점은 사용자 프로필이 데이터베이스에 이미있는 경우 저장이 실패하지 않는다는 것입니다. – Jim

+0

폼을 생성 할 때 POST와 POST 브랜치가 설정되어 있는지 확인하기 전에 실제로 get_or_create를 할 수 있습니다.'instance = profile'을 설정하십시오. – jtiai

-1

때문에, 필드에없는 그런 경우

@login_required 
def updateProfile(request, user_id): 

    if request.method == 'POST': 
     form = UserProfileForm(request.POST) 
     form.user = request.user 

     if form.is_valid(): 
      form.save(commit=True) 
      return index(request) 

    else: 
     profile, created = UserProfile.objects.get_or_create(user = request.user) # don't know if this will actually work. 
     profile_form = UserProfileForm(instance=profile) 
     context = { 
      'user' : request.user, 
      'form' : profile_form 
     } 
     return render(request, 'myapp/profile.html', context) 
관련 문제