3

我有一种情况,我需要为 django 1.5 项目子类化自定义用户模型(相关问题/背景:Subclassing AbstractUser in Django for two types of users

我需要一个抽象的用户类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)
    ...

其中一个比另一个有什么优势吗?

4

1 回答 1

0

我尚未对此进行测试,但我希望您的第一个建议是创建两个数据库表:一个用于学生,一个用于教师,每个表都有一个指向 AUTH_USER_MODEL 的外键。

对于第二个,我希望 Django 创建三个数据库表:一个用于 SchoolPerson(这将与带有附加字段的默认用户表完全相同)和两个用于具有 SchoolPerson 外键的学生和教师。

所以我认为答案取决于您的要求。

于 2013-06-05T08:47:42.330 回答