Django规则重新使用谓词



我创建了两个谓词,它们在性质上非常相似。一个使用列表,另一个使用静态字符串。

@rules.predicate
def can_edit_items(user, fields):
for perm in user.groups.all()
if perm.name not in settings.fields[fields]
return False
return True
@rules.predicate
def can_edit_specific_item(user, field):
for perm in user.groups.all()
if perm.name not in settings.fields[field]
return False
return True

我的要求是can_edit_specific_item()必须通过传入单个字符串field_1来使用can_edit_items()

我已经尝试创建以下变体,但它似乎不起作用,因为我打算将其用于

@rules.predicate
def can_edit_specific_item(user, field):
for perm in user.groups.all()
if perm.name not in can_edit_items[field]
return False
return True

您可以通过在can_edit_specific_item中设置@rules.medicate并将其作为函数返回来定义can_edit_specific_item,只需传入您需要的字段。

我有点不确定更广泛的要求,但也许这可能会奏效

def can_edit_specific_item(*field):
@rules.predicate
def predicate(user):
return can_edit_items(user, field)
return predicate

相关内容

  • 没有找到相关文章

最新更新