2013-08-16 6 views
0

У меня есть класс разрешений, для которого мне нужно создать статический метод, чтобы получить соответствующий элемент на основе метода POST в моем views.py. Выбор осуществляется с помощью флажков, в которых вы можете выбрать любую из них, пару или все из них, исходя из ваших предпочтений. Это создает список строк (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

Есть целая куча вещей неправильно с вашим кодом, и это, кажется, усложненной. Я предлагаю вам сделать несколько уроков 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. 
+0

Благодарим вас за ответ. Извините за плохое объяснение. Вы правы, класс Permissions собирает все объекты Permission (индивидуальные для каждой компании, другую модель). Поэтому мой вопрос заключается в том, как я могу получить соответствующее разрешение из класса Permissions (я объяснил), проверив флажки в шаблоне. Они называются/используются Permissions.NAME (поэтому Permissions.USER_ADMIN, Permissions.HR и т. Д.) В других частях кода, и они дают вам определенные привилегии (добавлять пользователей и т. Д.). Я получаю список проверенных элементов, но как их сопоставить с правильным разрешением? –

+0

См. Дополнения к ответам. Опять же, это довольно простые методы python. –