2013-03-16 55 views
0

在下面的Django manage.py shell會話中,爲什麼我沒有看到我添加到我的用戶對象的權限,直到我爲該用戶執行新的查詢?添加權限後,爲什麼需要重新查詢Django用戶才能看到添加的權限?

In [16]: john = User.objects.create_user(username='john') 

In [17]: john 
Out[17]: <User: john> 

In [18]: john.get_all_permissions() 
Out[18]: set([]) 

In [19]: john.user_permissions.add(Permission.objects.get(codename='add_user')) 

In [20]: john.get_all_permissions() 
Out[20]: set([]) <== I expected to see the new permission here. Why not? 

In [21]: john = User.objects.get(username='john') 

In [22]: john.get_all_permissions() 
Out[22]: set([u'auth.add_user']) 

回答

0

Django的不許可你第一次要求他們對給定用戶實例,它存儲了他們對_perm_cache用戶對象上的緩存,這是爲了防止過多的數據庫查詢檢查過程中可能發生的無數次權限時請求(特別是在模板呈現過程中,您可能會對錶單和鏈接進行權限檢查)。

您已經確定了您的問題的一種解決方案,即從數據庫重新加載用戶。另一種是刪除_perm_cache(和_group_perm_cache如果你想徹底)從用戶對象:

del john._perm_cache 
del john._group_perm_cache 
+0

優秀的詳細原因和解決方案 - 感謝安德魯! – 2013-03-16 03:14:37

相關問題