2011-02-07 146 views
0

我遵循擴展User類的method以在我的應用程序中實現自定義用戶。django身份驗證後端

正如鏈接中所述,需要編寫自定義身份驗證後端以便返回相應的自定義用戶類而不是用戶。

但是我有一個以上的自定義用戶類,即Student,Teacher,Parent。

有沒有比檢查Student-> Teacher-> Parent表返回正確的自定義用戶更好的方法?

回答

1

我能想到的唯一解決方案是實際更改django使用的用戶模型,並添加一個content_type字段,該字段可以告訴您實際用戶對象是什麼類型的用戶。然後你可以直接在那個上查詢。您每次仍需要2次查詢才能獲取正確的用戶對象。

或者,您可以擁有一個從User繼承的模型,該模型包含您的三個類所需的所有功能,例如將其稱爲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__ 
+0

代理方法看起來很有趣,但是如何爲例如Teacher實現類特定的字段? – goh 2011-02-07 15:50:22