将字符串列表与Model值进行比较并获取相应的字段

时间:2013-08-16 22:21:31

标签: google-app-engine python-2.7 webapp2

我有一个Permissions类,我需要根据我views.py中的POST方法创建一个静态方法来获取相应的元素。选项通过复选框完成,您可以根据自己的喜好选择其中任何一个,一对或全部。这会创建一个字符串列表(u'OWNER'),应该在静态方法中处理并返回相应的Permissions.OWNERPermissions.HRPermissions.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

我真的不知道如何将字符串与模型中的值进行比较......我也不确定我是否正确标题。

提前谢谢你,

鲍里斯拉夫

1 个答案:

答案 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.