-1

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

你能帮我吗?

视图.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
4

2 回答 2

2

如果你真的想为你的用户定义一个 URL,但继续使用用户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。当您为用户提供 Profile 模型时, Nick 的回答会更适合您。

于 2012-08-17T16:01:43.607 回答
1

用户对象没有 url。如果您想为每个用户设置一个 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/')

并编写另一个视图来处理配置文件的显示。如果没有有关您要完成的工作的更多信息,很难回答。

于 2012-08-17T15:32:38.560 回答