MultipleObjectsReturned:get()返回多个Permission - 它返回2

时间:2016-04-20 14:18:42

标签: django

我的测试失败说get()返回2个权限..但我没有在任何地方分配2个权限。在我的视图中,我从django.contrib.auth.mixins继承PermissionRequiredMixin并分配权限。下面是我的测试setUp代码,其中显示错误:

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', 'lennon@thebeatles.com', 'admin')
        self.user.user_permissions.add(
            Permission.objects.get(codename="add_material"))

2 个答案:

答案 0 :(得分:0)

你分配的内容并不重要。此行导致错误 Permission.objects.get(codename="add_material") 这意味着您拥有多个代码名为add_material的权限。

要了解add_material名称的其他权限,请进入Django控制台 python manage.py shell 一旦在那里导入auth模型并检查权限

from django.contrib.auth.models import *

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

这应该告诉您其他模型注册了具有相同名称的权限。

答案 1 :(得分:0)

添加到上述解决方案中,您可以避免循环,而只需使用简单的代码即可从其他具有相同代码名称的权限中获得以下权限:

permissions = Permission.objects.filter(codename='add_material')
print(permissions)