2011-12-17 68 views
0

我使用django-registration進行註冊和登錄。我的ModelsForms.py工作正常。問題是我想存儲當前登錄用戶的id中的的user場以下Model想要獲取當前登錄用戶的ID(使用django註冊)

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:這是我的view

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

     form.save() 
else: 
    form = UserProfileForm() 

更新:我可以使用模板中的{{ user.id }}當前登錄用戶。但現在如何將此id傳遞給user field

+0

那麼,你可以通過[django.http.HttpRequest]實例訪問當前用戶(https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user )在視圖中可用的類(通常作爲標準函數視圖名爲'request'的參數,或者在基於類的視圖的'self.request'屬性中找到)。它的工作原理是 – 2011-12-17 14:31:37

回答

2

那麼,在你看來你可以通過request.user訪問當前記錄的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 2011-12-17 16:45:48

+0

它應該是'MyForm(instance = request.user.get_profile()',data = request.POST或None)' – sdolan 2011-12-17 17:01:07

+0

@sdolan謝謝但另一個問題'你需要在你的項目設置中設置AUTH_PROFILE_MODULE' – Kulbir 2011-12-17 17:30:38