为django 1.5选择正确的用户继承方法

时间:2013-05-29 22:27:14

标签: django django-models django-users django-1.5 django-inheritance

我有一种情况需要为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)
    ...

其中一个优于其他优势吗?

1 个答案:

答案 0 :(得分:0)

我没有对此进行过测试,但我期望您首先建议创建两个db表: 一个用于学生,一个用于教师,每个都带有AUTH_USER_MODEL的外键。

对于第二个,我希望Django创建三个db表: 一个用于SchoolPerson(将与具有附加字段的默认Users表一样),两个用于Student和Teacher,具有到SchoolPerson的外键。

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