2016-11-04 39 views
0

我們的團隊正在構建一個需要在用戶子類之間輕鬆切換的應用程序。每個用戶角色都有不同的字段,因此他們不需要繼續,但每個用戶實例都應該連接到這些子句中的一個。Django - 改變用戶角色的習慣方式

轉換這些角色最常用的方式是什麼?我們是否應該首先使用子類?

我看到這些頁面: Convert a subclass model instance to another subclass model instance in django? Change class of child on django models

我們是前刺,因此開放的不斷變化的模式,如果有更好的方法,不像這兩個例子。

+0

你爲什麼不使用Django自己的'permissions'框架,這將使您能夠創建一組和'將權限分配給groups',然後將用戶添加到組用戶可以在模型上許可,您可以使用permission_requited裝飾檢查權限或混合? – cutteeth

+0

權限不是唯一不同的東西。有一個子類,它不會出現在其他國家,這在架構這些子類鏈接到特定表的一些組件。看起來這似乎不能解決我們的問題。 –

回答

0

如果您可以使用自定義用戶模型,則可以使用GenericForeignKey來實現此目的。

您可以擁有一個具有共同屬性/行爲的用戶模型,以及實現與這些角色關聯的行爲的多個模型。因此,如果您需要更改用戶的角色,則可以刪除一個模型的舊相關實例並創建另一個模型的實例。

class CustomUser(AbstractUser): 
    role_ct = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    role_id = models.PositiveIntegerField() 
    role = GenericForeignKey 

class Role1(models.Model): 
    """Some stuff here""" 

class Role2(models.Model): 
    """Some other stuff here""" 

但是,應注意的警告的:GenericForeignKeys可能稍微慢和稍硬進行操作。

如果這看起來像你的情況矯枉過正,你可以去與Django管理權限,由cutteeth的建議。