我正在创建一个应用程序,它将有两种类型的用户教师和学生。它们都可以连接到我的门户网站,但它们具有不同的权限。他们也有不同的领域(老师有关于姓名的领域,研究生学习后的研究领域等,学生有姓名,父母姓名,他正在上哪些课程等)。我想扩展用户模型并创建两种类型的用户,如上所述。我在this上运行了关于使用AUTH_USER_MODEL扩展用户模型并继承AbstractBaseUser,从而在您的应用中创建:
class MyUser(AbstractBaseIser):
#custom user fields
并设置
AUTH_USER_MODEL = 'myapp.MyUser'
在设置文件中。
但如果我理解正确,它只能发生在一个自定义用户身上。是否更适合我想要的东西
user = models.OneToOneField(User)
在我的客户用户模型中(例如教师)?可以AUTH_USER_MODEL除了字典能够区分两种类型的用户吗?使用OneToOneField对性能有多大影响,因为doc说如果使用OneToOnField则必须执行许多连接
抱歉,我没有提供任何自己的代码,因为我还没有编写任何代码。我希望在实施之前为我解决这个问题。
答案 0 :(得分:3)
通过MyUser
保持身份验证。做这样的事情:
class UserType(models.Model):
type = ... # teacher, student, whatever
class MyUser(models.Model):
name = ...
username = ...
user_type = models.ForeignKey('UserType',...
class TeacherProfile(models.Model):
user = models.ForeignKey('MyUser',...
user_type = models.ForeignKey('UserType',...
gradebook = ...
class StudentProfile(models.Model):
user = models.ForeignKey('MyUser',...
user_type = models.ForeignKey('UserType',...
homework = ...
MyUser模型上的有一个类似的方法:
def get_profile(self):
if user_type_is_teacher():
return TeacherProfile.objects.get(user=self, user_type=self.user_type)
现在,如果您有学生用户u
,您可以说
u.get_profile().homework
您可以自己添加更多错误处理等。