2013-06-20 3 views
0

У меня есть модель зарплаты, которая будет обрабатывать зарплату сотрудников в нескольких компаниях, или, скорее, я бы сказал, что несколько мест работы одной и той же компании. Поэтому, когда я добавляю компоненты зарплаты, я выбрал модель Expando, поскольку каждая компания может иметь специфические для страны компоненты в соответствии со своей структурой зарплаты. Эти компоненты заработной платы рассчитываются, когда выполняется расчет заработной платы. Проблема в том, что мне может понадобиться отобразить ее где-нибудь, может быть в профиле сотрудника. Как мне это сделать? Например,Доступ к свойствам модели expando

А на компании ABC Индия будет

основные: 6600

DA: 1250

B в компании ABC UK будет

HRA: 1500

Специальное пособие: 3000

Поскольку эти реквизита генерируются выполнения в соответствии с соответствующими компаниями, как я к ним доступ? Я не могу писать pay.basic для сотрудника в Великобритании. Надеюсь, вы поняли мою проблему.

+0

Вы имеете в виду класс Expando в Google App Engine? –

+0

Да. Я забыл упомянуть об этом. –

+0

вы всегда можете получить доступ к свойствам с помощью getattr. т.е. 'getattr (зарплата, 'basic')' –

ответ

-1

Как предложил Тим, вы можете проверить, если атрибут существует, выполнив:

basic_salary = getattr(salary, 'basic', False) 

Таким образом, basic_salary будет значение basic если salary этот атрибут, False иначе.

В качестве альтернативы, вы можете получить список свойств экземпляра имеет по:

attributes = salary._properties.keys() 

Хотя вы обращаетесь, что значит быть частной частью класса, вы можете получить доступ к нему (будьте осторожны, чтобы сохранить взгляд на изменения в классе, которые могут нарушить такой доступ). С помощью этого списка, вы можете проверить, если basic в salary по:

has_basic = 'basic' in attributes 
Смежные вопросы