2011-12-17 5 views
0

등록 및 로그인 목적으로 django-registration을 사용하고 있습니다. 내 ModelsForms.py이 정상적으로 작동합니다.현재 로그인 한 사용자의 ID를 가져오고 싶습니다 (장고 등록 사용)

MALE = 1 
FEMALE = 2 
SEX_CHOICES = (
    (MALE,'Male'), 
    (FEMALE,'Female'), 
) 

class UserProfile(models.Model): 
    #user = models.IntegerField() # update : Changed to ForeignKey. 
    user = models.ForeignKey(User) 
    gender = models.IntegerField(choices = SEX_CHOICES,null=True, blank=True) 
    zip_code = models.CharField(max_length=100,null=True, blank=True) 
    language = models.ManyToManyField(Category) 

ModelForm :

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     widgets = {'language': forms.CheckboxSelectMultiple} 

업데이트 2 :

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

     form.save() 
else: 
    form = UserProfileForm() 
: 여기 내 view 인 문제는 Model 다음 현재 로그온 한 사용자의 iduser 분야에서 내가 저장할입니다

업데이트 : 템플릿에 {{ user.id }}을 (를) 사용하여 현재 로그인 한 사용자를 얻을 수 있습니다. 하지만 지금은 iduser field에 어떻게 전달합니까?

+0

글쎄, [django.http.HttpRequest] (https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user) 인스턴스를 통해 현재 사용자에게 액세스 할 수 있습니다.) 클래스는 뷰에서 사용 가능하며 (보통 표준 함수 뷰의 경우'request'라는 이름의 인자로 사용되거나 클래스 기반 뷰의 경우'self.request' 속성에서 찾을 수 있습니다). –

답변

2

글쎄, 당신은 현재 user을 통해request.user을 통해 액세스 할 수 있습니다.

이 사용자에게 initial 데이터를 확인하여 Form :

@login_required 
def my_view(request): 
    logged_user = request.user 
    initial = {'user': logged_user} 
    form = MyForm(request.POST or None, initial=initial) 
    # Here your logical code 
    # ... 
    return HttpResponse(...) 

을 그리고 당신이 사용하는 경우 ModelForm :

@login_required 
def my_view(request): 
    logged_user = request.user 
    form = MyUserProfileModelForm(
       request.POST or None,\ 
       instance=logged_user.get_profile()) 
    # Here your logical code 
    # ... 
    return HttpResponse(...) 

참고 : get_profile()OneToOneField하고 데이터베이스 경우 DoesNotExist 예외를 발생시킬 수있다 (여기에 다른 것을 시도한 경우에 발생할 수 있습니다.)

+0

그것이 효과가있다. 하지만 양식을 편집 한 다음이 코드를 테이블에 새 행을 삽입하면됩니다. – Kulbir

+0

'MyForm (instance = request.user.get_profile()', data = request.POST 또는 None)' – sdolan

+0

@sdolan thanks 그러나 다른 문제'프로젝트 설정에서 AUTH_PROFILE_MODULE을 설정해야합니다. ' – Kulbir