2012-08-17 61 views
-1

我的用户注册流程中断了。我在views.py中有下面的代码,但收到一个没有user.url属性错误(包含在视图代码下面)。用户正在正确创建,我可以导航到新的用户个人资料页面,但链接已损坏。我无法找到有关默认用户网址调用的信息。Django用户注册网址重定向中断

你能帮忙吗?

views.py

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      new_user = authenticate(username = request.POST['username'], 
            password = request.POST['password1']) 
      login(request, new_user) 
      return HttpResponseRedirect(new_user.url) 
    else: 
     form = UserCreationForm() 
    return render_to_response("registration/register.html", {'form': form}, 
           context_instance=RequestContext(request)) 

错误:

AttributeError at /register/ 
'User' object has no attribute 'url' 
Request Method: POST 
Request URL: http://localhost:8000/register/ 
Django Version: 1.4.1 
Exception Type: AttributeError 
Exception Value:  
'User' object has no attribute 'url' 
Exception Location: /home/methuselah/code/django/ssc/dev/ssc/crewcal/views.py in register, line 74 
+0

第74行是否返回HttpResponseRedirect(new_user.url)? – 2012-08-17 15:13:44

+4

'用户'没有'url'属性。你为什么认为它应该? – 2012-08-17 15:20:28

+0

@ChrisPratt看起来像他想登录后路由用户到他的个人资料页面 – 2012-08-17 15:27:40

回答

1

用户对象没有一个网址。如果你想为每个用户设置一个url,你需要创建一个与用户模型相关的附加模型。

class UserAttribute(models.Model): 
    user = models.OneToOneField(User) 
    url = models.URLField(verify_exists=False, default="/home/page/") 

    def __unicode__(self): 
     return self.user.username 

我不知道你为什么会要为每个用户一个唯一的URL,虽然,因为你可以一次他们正在通过登录检索request.user在每次请求的用户。

所以你可能只想做:

return redirect('/profile/') 

和写入另一种观点来处理个人资料的显示。如果没有关于你想要完成什么的更多信息,很难回答。

2

如果你真的定义一个网址为您的用户,但继续使用用户从django.contrib.auth,而不是创建一个新的模式,你需要一个条目添加到您的settings.ABSOLUTE_URL_OVERRIDES

ABSOLUTE_URL_OVERRIDES = { 
    'auth.user': lambda u: '/users/%s/' % u.id 
} 

完成之后,您可以使用user.get_absolute_url()在用户注册后将用户重定向到/users/<id>/

如果要添加其他配置文件到您的User不过,你需要创建一个配置文件模式 - 在这一点是有道理的他们有联系的,而不是覆盖User的get_absolute_url。 Nick's answer将为您的用户提供更好的配置文件模型。

+0

哇。我在Django进行了近3年的广泛开发,从来不知道“ABSOLUTE_URL_OVERRIDES”。你永远不知道还没有受过教育;) – 2012-08-17 16:23:10