2012-08-17 59 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