我有一個情況我需要繼承了一個Django 1.5的項目自定義用戶模型(有關問題/背景這裏:Subclassing AbstractUser in Django for two types of users)選擇Django的正確的用戶繼承方法1.5
我需要一個抽象的用戶類別SchoolPerson
和許多基於此的子類(Student
,Teacher
等)。我想我已經解決了我需要將用戶模型放在一個單獨的數據庫表中的子類,因爲其他應用程序依賴於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)
...
對其中一個有什麼優勢?
也許你可以用一個用戶類和django的權限系統實現同樣的功能:https://docs.djangoproject.com/en/dev/topics/auth/default/#topic-authorization – Alp
@Alp - my不同的用戶模型具有不同的字段/屬性,所以我不能真正做到這一點(編輯了這個問題使其更清晰) – askvictor