2015-02-10 55 views
1

Django noob here - 我最近指出了用於註冊/處理用戶的django-all-auth,我發現它在其即時設置中很棒。使用django-all-auth實現多個配置文件

但是,我試圖實現多個用戶配置文件模型的絆腳石。在閱讀其他答案時,我發現this是迄今爲止最接近的答案,但並非真正需要的。

編碼我自己的基本註冊時,用戶會選擇一個賬戶類型(例如基本,專業,精英 - 每個都是他們自己的配置文件模型)。根據所選鏈接,註冊表單將顯示通用用戶註冊表單以及用戶所選類型的配置文件表單。

我知道我可以去完全定製all-auth並做出類似這樣的工作,但是我希望能夠指向一個涉及較少破壞原始應用程序的方向。我已經考慮過在註冊後重定向用戶以選擇配置文件類型,但這似乎是很多額外的步驟。

感謝您的幫助!

回答

0

要擴展基本用戶類,只需子類AbstractUser。你可以在docs找到。有了這個,你可以添加你的基本用戶丟失的字段。

現在,您需要具有不同字段的幾種類型的配置文件,或者可能是相同的字段,但每次都添加新的字段。

您可以創建類似:

class ProfileBase(models.Model): 
    user=models.OneToOneField(User) 

class ProfilePro(ProfileBase): 
    pro_field=models.SomeField(Foo) 

#You can extend ProfilePro here if you want it to include the pro_field 
class ProfileElite(ProfileBase): 
    elite_field=models.someField(Bar) 

一旦這些模型創建的形式應該很容易。 請注意,當您以這種方式進行子類化時,django會爲每個模型創建一個表,包括子類表上僅包含新字段。這使每個繼承級別都需要一個連接,所以儘量不要濫用它。

有使用繼承第二種方式:

class ProfileBase(models.Model): 
    user=models.OneToOneField(User) 

    class Meta: 
     abstract=True 

如果你定義的基類抽象的,你不會有一個表,所以你不能創建該模型對象,但你的每個子類都將在它自己的表上。如果您這樣做,您可能需要額外的邏輯來處理用戶更改配置文件類型(即從專業版轉爲精英版)時的情況。

爲了保持從Django的allauth這種分離,只是完成註冊(創建一個表單,並在定義設置ACCOUNT_SIGNUP_FORM_CLASS覆蓋allauth默認與您的基本信息+挑選一個輪廓式的形式),一旦用戶登錄將其重定向到他們的個人資料以完成該過程。

+0

對,我瞭解繼承和我如何從基類中繼承子類......我想我想要更多地包裹我的頭是什麼形式的流。我不確定如何在表單中實現類選擇。最初我有一個靜態頁面,其中URLconf使用正則表達式根據鏈接中的變量提取正確的表單。但是隨着allauth的出現,似乎沒有一種優雅的方式可以在不真正自定義原始視圖和模板的情況下將這種情況拉開。這是我不確定的。謝謝您的幫助! – 2015-02-10 16:04:04

+0

您正嘗試擁有多個註冊表單,而不是單一註冊,然後再添加一個配置文件設置。如果您需要針對不同類型的帳戶使用不同的配置文件,則可以在註冊後執行此操作(將信號分配給用戶或在用戶訪問其配置文件時指定)。如果您需要這些信息,請添加一個mixin重定向到他們的配置文件,直到信息更新。 – cdvv7788 2015-02-10 23:13:21

相關問題