我遵循扩展User类的method以在我的应用程序中实现自定义用户。
如链接中所述,需要编写自定义身份验证后端,以便返回适当的自定义用户类而不是用户。
但是我有多个自定义用户类,即Student,Teacher,Parent。
有没有比检查Student-> Teacher->父表更好的方法来返回正确的自定义用户?
答案 0 :(得分:1)
我能想到的唯一解决方案是实际更改django使用的User模型,并添加一个content_type字段,该字段将告诉您实际用户对象的用户类型。然后你可以直接查询那个。每次仍然需要2个查询才能获取正确的用户对象。
或者,您可以拥有一个继承自User的模型,该模型包含您的三个类所需的所有功能,例如将其称为SuperUser,并使用一个特殊字段来标识它是学生,教师还是父母。
然后为用户获取SuperUser对象,从而包含所有必需的数据。通过使用特殊字段来标识它们是哪种用户类型,您可以拥有一个代理模型,您可以为每种类型的用户(ProxyStudent,ProxyTeacher等)提供代理模型,使其表现得如此。
这意味着您只会遇到2次数据库命中,但只要您使用代理模型访问它们,就可以按指定存储数据。
class SuperUser(User):
type = models.IntegerField(choices=[(0, 'Student'), (1, 'Teacher'), (2, 'Parent')]
# insert all the data for all 3 seperate classes here
class ProxyStudent(SuperUser):
class Meta:
proxy = True
def special_student_method(self):
pass
fetch request.user
and make request.user an instance of SuperUser
student = ProxyStudent()
student.__dict__ = request.user.__dict__