2015-12-23 25 views
2

我在django項目中有兩種截然不同類型的用戶:培訓師客戶端在Django中維護兩種獨特的用戶類型?

我對他們的模型,像這樣:

class TrainerProfile(model.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    #...other Trainer fields 

class ClientProfile(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    #...other Trainer fields 

我現在面臨的問題是我怎麼能明確強制執行,用戶可以只有一個的這些,然後詢問他們是哪一個?

+0

爲什麼不只有一個配置文件模型帶有一個字段來說明它是哪種類型? – Carlos

+0

@Carlos這將是指定類型的字段的最佳數據類型?一些整數,例如0 = TrainerProfile,1 = ClientProfile? –

+0

是的,你有很多選擇。我會使用int或其他類似枚舉的類型,因爲它看起來會有少量的選擇。 – Carlos

回答

0

做一個基本輪廓模型,並把OneToOneField的基類:

class UserProfile(model.Model): 
    user = models.OneToOneField(User, primary_key=True) 

抽象出來的共同的東西,並與inheritance延長等型材:

class TrainerProfile(UserProfile) 

class ClientProfile(UserProfile) 

注:你不能隱藏基地UserProfile的字段。如果它本身無法使用,那麼可以考慮將其設置爲基類。

+0

使用此解決方案時,我如何確定它是否是TrainerProfile或ClientProfile,當我對用戶進行身份驗證時? –

+0

你可以看看'user.userprofile .__ class__' – wim