要擴展基本用戶類,只需子類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默認與您的基本信息+挑選一個輪廓式的形式),一旦用戶登錄將其重定向到他們的個人資料以完成該過程。
對,我瞭解繼承和我如何從基類中繼承子類......我想我想要更多地包裹我的頭是什麼形式的流。我不確定如何在表單中實現類選擇。最初我有一個靜態頁面,其中URLconf使用正則表達式根據鏈接中的變量提取正確的表單。但是隨着allauth的出現,似乎沒有一種優雅的方式可以在不真正自定義原始視圖和模板的情況下將這種情況拉開。這是我不確定的。謝謝您的幫助! – 2015-02-10 16:04:04
您正嘗試擁有多個註冊表單,而不是單一註冊,然後再添加一個配置文件設置。如果您需要針對不同類型的帳戶使用不同的配置文件,則可以在註冊後執行此操作(將信號分配給用戶或在用戶訪問其配置文件時指定)。如果您需要這些信息,請添加一個mixin重定向到他們的配置文件,直到信息更新。 – cdvv7788 2015-02-10 23:13:21