2014-04-22 16 views
0

我正在用django構建一個登錄/註銷用戶系統,並且我開始使用django auth系統進行遊戲。Django:自定義用戶表單而不是內置的自定義必填字段

所以我使用自定義Django的UserCreationForm像這樣:

views.py

from django.contrib.auth.forms import UserCreationForm 

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      return HttpResponseRedirect("/books/") 
    else: 
     form = UserCreationForm() 
    return render(request, "registration/register.html", { 
     'form': form, 
    }) 

但這種形式呈現了很多不必要的東西,如下所示:https://app.box.com/s/wmrtyal3mctb9hctsnom

首先,我想擺脫添加的信息,是否有一個很好的方法來做到這一點?有沒有什麼好的方法來做到這一點?有沒有辦法自己編輯UserCreationForm,還是需要創建自己的表單?

其次,假設我想向註冊頁面添加更多必填字段,那麼執行此操作的最佳方法是什麼?假設我想讓一個人註冊男性或女性 - 我意識到我應該擴展用戶模型,但是如何註冊原始用戶模型和擴展用戶模型?

謝謝你的建議,並請與我裸露 - 這是使用Django的身份驗證系統:)

回答

2

而不是延長UserCreationForm類我第一次,你應該重寫。檢查它的來源here

例如,如果你想擺脫文本旁邊的密碼字段,說「是如上輸入相同的密碼」,刪除此行的:

help_text=_("Enter the same password as above, for verification.")) 

從Django中/ Django的/的contrib/AUTH/forms.py(請見下面鏈接)


編輯:我建議你重寫形式類,而不是延長他們的原因是因爲它僅僅是更方便的這種方式。從Django文檔:

如果你不希望使用內置的意見,但希望不必寫形式此功能方便 ,該 認證系統提供了多種內置形式位於 django.contrib.auth.forms

如果您要擴展您的用戶模型類,則需要相應地更改表單類。再從文檔:

正如你所期待,內置Django的表單和視圖使有關他們正在使用的用戶模型的某些 假設。如果您的用戶模型不遵循相同的假設,則可能需要定義替換表格,並將該表格作爲驗證視圖的 配置的一部分傳遞。

更多細節

herehere如果你只是想改變UserCreationForm你可以編輯UserCreationForm類作爲forms.py模塊正如我上面提到。

如果您正如您在問題中提到的那樣,想要將更多必填字段添加到註冊頁面,您需要製作一個自定義用戶模型。有關如何操作的詳細信息,請參閱here

+0

您可以詳細說明如何完成此操作嗎?我是否插入源代碼並將其更改爲我自己的forms.py文件?如果你不喜歡解釋,你能指出我是在一個開始的好地方,而不是源文件本身。 此外,爲什麼我會想這樣做,而不僅僅是擴展模型類?有什麼好處? – ApathyBear

+0

@AathyBear更新了我的答案和更多細節。如果這回答了您的問題,請隨意選擇它作爲答案。 – fr1tz

+0

謝謝你的回答,非常有幫助。 :) – ApathyBear