3

我有一個情況我需要繼承了一個Django 1.5的項目自定義用戶模型(有關問題/背景這裏:Subclassing AbstractUser in Django for two types of users選擇Django的正確的用戶繼承方法1.5

我需要一個抽象的用戶類別SchoolPerson和許多基於此的子類(StudentTeacher等)。我想我已經解決了我需要將用戶模型放在一個單獨的數據庫表中的子類,因爲其他應用程序依賴於AUTH_USER_MODEL,其中只能有一個。

所以我看到它的方式,我必須選擇這樣做:添加一個到一個標準用戶模式在我的抽象SchoolPerson類:

class SchoolPerson(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    ... 
    class Meta: 
     abstract = True 

class Student(SchoolPerson): 
    year_level = models.CharField(max_length=3) 
    ... 

class Teacher(SchoolPerson): 
    govt_id = models.CharField(max_length=10) 
    ... 

或者,我可以讓我的SchoolPerson模型繼承AbstractUser,但保留這個類非抽象:

class SchoolPerson(AbstractUser): 
    ... 
    #no Meta abstract here 

class Student(SchoolPerson): 
    year_level = models.CharField(max_length=3) 
    ... 

class Teacher(SchoolPerson): 
    govt_id = models.CharField(max_length=10) 
    ... 

對其中一個有什麼優勢?

+0

也許你可以用一個用戶類和django的權限系統實現同樣的功能:https://docs.djangoproject.com/en/dev/topics/auth/default/#topic-authorization – Alp

+0

@Alp - my不同的用戶模型具有不同的字段/屬性,所以我不能真正做到這一點(編輯了這個問題使其更清晰) – askvictor

回答

0

我還沒有測試過這個,但我期望的是您的第一個建議是創建兩個數據庫表: 一個用於學生,一個用於教師,每個都有一個外鍵給AUTH_USER_MODEL。

對於第二個,我希望Django創建三個數據庫表格: 一個用於SchoolPerson(與其他字段相同的默認Users表格),另外兩個用於StudentPerson的外鍵學生和教師。

所以我認爲答案取決於您的要求。