Django guardian user.has_perm 现有数据为 false

Django guardian user.has_perm false for existing data

我正在尝试使用 Django Guardian 授予权限。当我尝试授予对现有数据的权限时,它会向我显示一条错误消息,但当我创建一个新对象时,它会向我显示真实信息。我做错了什么?

我的代码:

>>>from django.contrib.auth.models import User
>>>from print.models import *
>>>from guardian.shortcuts import assign_perm
>>>user = User.objects.create(username='tanvir',password='antu')
>>>excel = ExcelData.objects.all()
>>>assign_perm('delete_exceldata', user, excel)
>>>user.has_perm('delete_exceldata', excel)
>>>False

但如果我这样做

>>>from django.contrib.auth.models import User
>>>from print.models import *
>>>from guardian.shortcuts import assign_perm
>>>user = User.objects.create(username='tanvir',password='antu')
>>>excel = ExcelData.objects.create(order_number='01245632145214')
>>>assign_perm('delete_exceldata', user, excel)
>>>user.has_perm('delete_exceldata', excel)
>>>True
excel = ExcelData.objects.all()

会给你一个查询集

excel=ExcelData.objects.create(order_number='1245632145214')

会给你一个对象..

您只能将权限分配给一个对象

如果您想为查询集分配权限,请在循环内执行

user = User.objects.create(username='tanvir',password='antu')
excel = ExcelData.objects.all()
for obj in excel:
    assign_perm('delete_exceldata', user, obj)
    user.has_perm('delete_exceldata', obj) # this will give you status for each obj