2015-01-05 60 views
-2

請幫助我獲取當前配置文件查看用戶名並將其保存在instance.user中。問題是我想獲取將被評爲其他用戶的用戶的用戶名。 這裏是我的代碼:如何獲取我正在查看的用戶的用戶名,而不是當前登錄的用戶名

def new_rate(request): 
    if request.method == 'POST': 
     form = RateForm(request.POST) 
     if form.is_valid(): 
      instance = form.save(commit=False) 
      try: 
       instance.rater = request.user 
    ---------> instance.user = !!!!! GET THE CURRENT PROFILE VIEWING USERNAME !!!!! 
       instance.validate_unique() 
       instance.save() 
       form.save_m2m() 
       return HttpResponseRedirect('/user/' + request.user.username) 
+0

你爲什麼想將其保存到已登錄的用戶,你也應該讓這個請求得到一個代替POST。 –

+0

首先,不要泄露,這是粗魯的,不要使用感嘆號。其次,你還沒有提供任何有用的信息。什麼是「當前配置文件查看用戶名」?它來自哪裏? –

+0

理想情況下,您應該將用戶ID或用戶slug作爲URL的一部分發送。例如'/ rating/new/ /'並以這種方式處理。 – karthikr

回答

0

,如果你的用戶進行身份驗證,您只能得到request.user.username。要檢查它使用request.user.is_authenticated()

因此,我認爲它看起來有點像這樣:

def new_rate(request): 
    if request.method == 'POST': 
     form = RateForm(request.POST) 
     current_user = request.user 
     if form.is_valid() and current_user.is_authenticated(): 
      instance = form.save(commit=False) 
      try: 
       instance.rater = current_user 
       instance.user = current_user 
       instance.validate_unique() 
       instance.save() 
       form.save_m2m() 
       return HttpResponseRedirect('/user/' + current_user.username) 

但對我來說,你的這個設計聽上去有缺陷。如果您已經使用request.POST,則應該POST當前配置文件的ID。

如果您正在查看網址/users/500並且您有表單。發送ID 500,然後在視圖中它應該得到的當前配置文件的用戶,如:

from django.contrib.auth import get_user_model 

User = get_user_model() 

def new_rate(request): 
    if request.method == 'POST': 
     form = RateForm(request.POST) 
     current_user = request.user 
     profile_id = request.POST['profile_id'] 

     if form.is_valid() and current_user.is_authenticated(): 
      instance = form.save(commit=False) 
      profile_user = User.objects.get(pk=profile_id) 

      try: 
       instance.rater = current_user 
       instance.user = profile_user 
       instance.validate_unique() 
       instance.save() 
       form.save_m2m() 
       # it should return us back to that profile, not the request.user's 
       return HttpResponseRedirect('/user/' + profile_user.username) 
+0

我正在使用@login所需的裝飾品intead,因此沒有人可以訪問此頁面,除非他在 – kostas1987

+0

太棒了!然後,只需省略is_authenticated支票,您就可以輕鬆前往 –

相關問題