我有一种情况需要为django 1.5项目子类化自定义用户模型(相关问题/背景:Subclassing AbstractUser in Django for two types of users)
基于此,我需要一个抽象用户类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)
...
其中一个优于其他优势吗?
答案 0 :(得分:0)
我没有对此进行过测试,但我期望您首先建议创建两个db表: 一个用于学生,一个用于教师,每个都带有AUTH_USER_MODEL的外键。
对于第二个,我希望Django创建三个db表: 一个用于SchoolPerson(将与具有附加字段的默认Users表一样),两个用于Student和Teacher,具有到SchoolPerson的外键。
所以我认为答案取决于你的要求。