我有一个Permissions类,我需要根据我views.py
中的POST方法创建一个静态方法来获取相应的元素。选项通过复选框完成,您可以根据自己的喜好选择其中任何一个,一对或全部。这会创建一个字符串列表(u'OWNER'),应该在静态方法中处理并返回相应的Permissions.OWNER
,Permissions.HR
,Permissions.USER_ADMIN
我的views.py
POST
方法如下所示:
permissions = self.request.get_all('permissions')
user.new_permission = Permissions.get_permission(permissions)
模型看起来像这样:
class Permissions(object):
OWNER = 'OWNER'
HR = 'HR'
USER_ADMIN = 'USER_ADMIN'
descriptions = {
OWNER: """Company owner (full admin)""",
HR: """Human Resources administrator (access to special fields within job and submissions)""",
USER_ADMIN: """Add/Delete users, change user permissions""",
}
到目前为止我对静态方法的了解:
@staticmethod
def get_permissions(permissions):
new_perms = []
for permission in permissions:
name = permission
if permission ==
new_perms.append(permission)
return new_perms
我真的不知道如何将字符串与模型中的值进行比较......我也不确定我是否正确标题。
提前谢谢你,
鲍里斯拉夫
答案 0 :(得分:0)
您的代码存在许多问题,而且似乎过于复杂。 我建议你做一些python教程。我不确定类定义是如何工作的。这里的任何方式都是你可以做到的一种方式。
class Permissions(object):
_perms = {
'OWNER': """Company owner (full admin)""",
'HR': """Human Resources administrator (access to special fields within job and submissions)""",
'USER_ADMIN': """Add/Delete users, change user permissions""",
}
@classmethod
def get_permissions(cls,permissions):
new_perms = []
for choice in permissions:
if choice in cls._perms:
new_perms.append(choice)
return new_perms
@classmethod
def get_description(cls,permission)
return cls._perm.get(permission)
实际上在重新阅读你的问题时,我不确定你真正想要做什么。您提到了一个模型,但您提供的权限类并未反映出这一点,我假设您需要查询该对象。实际上,如果您使用模型来定义权限,则每个可能的权限都有一个Permission对象 - 也许。
备用策略,但有许多并且没有详细了解您真正计划如何使用权限。 (我使用repose.who /适用于相当完善的权限模型)。在最基本的情况下,您可以将getattr与现有类一起使用。但是我并不热衷于此,因为没有检查。
class Permissions(object):
OWNER = 'OWNER'
HR = 'HR'
USER_ADMIN = 'USER_ADMIN'
@classmethod
def get_permission(cls,permission):
if hasattr(cls,permission):
return getattr(cls,permission)
else:
raise KeyError("No permission %s" % permission) # Some better exception should be used.