2016-04-20 102 views
0

我的測試失敗說get()返回2個權限..但我沒有在任何地方分配2個權限。在我的視圖m從django.contrib.auth.mixins繼承PermissionRequiredMixin並分配權限。以下是我的測試setUp代碼,其中顯示錯誤:MultipleObjectsReturned:get()返回多個權限 - 返回2

def setUp(self): 
     self.material = MaterialFactory.create() 
     self.material_reorder = MaterialFactory.create(
      opening_stock=500, reorder_qty=1000) 
     self.user = User.objects.create_user(
      'admin', '[email protected]', 'admin') 
     self.user.user_permissions.add(
      Permission.objects.get(codename="add_material")) 
+0

錯誤:test_modal_create_view(stores.tests.test_views.ReelMaterialModalCreateViewTest) ---------------------------------- ------------------------------------ 回溯(最近通話最後): 文件「/ home /anand/base/tests/mixin.py「,第95行,在setUp中 Permission.objects.get(codename = self.permission_codename).id) 文件」/home/anand/Envs/local/lib/python2.7 /site-packages/django/db/models/manager.py「,第122行,在manager_method中 return getattr(self.get_queryset(),name)(* args,** kwargs) MultipleObjectsReturned:get()返回多於一個權限 - 它返回2! –

+0

使用[編輯](http://stackoverflow.com/posts/36746710/編輯)按鈕更新您的問題。但錯誤是顯而易見的。您有兩個具有相同代碼名稱的權限。你期望在這種情況下會發生什麼? – Sayse

+0

我使用的是默認的django權限:像這樣permission_required ='stores.add_material'在我的意見。沒有超過一個權限 –

回答

0

無論您指定什麼都沒關係。此行導致錯誤 Permission.objects.get(codename="add_material") 這意味着您有多個權限,代碼名稱爲add_material

要找出什麼其他權限是名add_material,在那裏進口身份驗證模式進入Django的控制檯 python manage.py shell 一次,檢查權限

 
from django.contrib.auth.models import * 

for p in Permission.objects.filter(codename="add_material") 
    print(p.pk, p.content_type) 

這應該告訴你什麼其他機型註冊許可與一樣的名字。

+0

permission_required ='stores.add_material'。像這樣,我正在爲視圖分配權限。只有一個代碼名稱的權限add_material –

+0

好吧,顯然有另一個地方,否則你的get只會返回一個結果。我會更新我的答案,並提供如何找到答案。 –

+0

謝謝瘋狂的袋熊..是的,我明白了..有兩個相同代號的權限 –