2015-01-05 61 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支票,您就可以轻松前往 –

相关问题