2017-10-04 20 views
1

當添加許可我使用一組:Django爲什麼權限代碼名稱與檢查它是否具有權限不同?

managers.permissions.add(
      Permission.objects.get(codename='add_user') 
     ) 

使用代號add_user

現在正在檢查時,如果用戶有特定的權限,我用users.add_user即。 app_name前置

self.assertTrue(self.user.has_perm('users.add_user')) 

這是爲什麼。 users.add_user是否可以get的權限。

當我嘗試它,我得到:

django.contrib.auth.models.DoesNotExist: Permission matching query does not exist. 

回答

1

型號名稱不是唯一的。您可以在另一個應用中使用另一個User模型。在這種情況下,Permission.objects.get(codename='add_user')將會失敗,並出現MultipleObjectsReturned。因此,使用更安全某物像:

Permission.objects.get(codename='add_user', content_type__app_label='users', content_type__model='user') 
+0

不幸的是,當我用這個,我得到'django.contrib.auth.models.DoesNotExist:權限匹配查詢不exist.' – surfer190

+0

好吧,看看app_label及模型研究您的權限content_type,並相應地進行過濾 – schwobaseggl

+0

Spot on,我的錯誤是我的應用標籤是'users' – surfer190