Мета-программирование в OpenERP - PullRequest
1 голос
/ 25 августа 2010

Вот способ разработки OpenERP

class stock_incoterms(osv.osv):

_name = "stock.incoterms"
_description = "Incoterms"
_columns = {
    'name': fields.char('Name', size=64, required=True),
    'code': fields.char('Code', size=3, required=True),
    'active': fields.boolean('Active'),
}
_defaults = {
    'active': lambda *a: True,
}

stock_incoterms ()
Это типичная модель OpenERP и соответствует имени таблицы stock_incoterms.
Свойство columns определяет столбцы для таблицы Свойство default определяет значение по умолчанию для каждого столбца.

Мои вопросы:

Как реализовать это в Python?
При запуске stock_incoterms () OpenERP будет читать эту модель, генерировать таблицу с этими определенными столбцами.
После этого, предположим, что я создал запись в этой таблице, затем я прошу дать мне модель этого класса, например
stock_incoterm = stock_incoterms.get (1) (идентификатор записи в дБ)
Теперь я могу получить доступ к
stock_incoterm.name
stock_incoterm.code
........

Этот способ определения модели является своего рода метапрограммированием, но я не знаю, как написать это на Python.

Может кто-нибудь подсказать мне подробности или несколько хороших ссылок о метапрограммировании на Python?

Ответы [ 2 ]

2 голосов
/ 28 августа 2010

Книга разработчиков OpenERP - лучшее место, чтобы начать поиск. Похоже, вы хотите добавить новую таблицу с именем stock_incoterm. Я бы порекомендовал вам запустить новый модуль и добавить в него таблицу вместе с экраном и некоторыми пунктами меню для редактирования таблицы. В книге разработчиков есть глава о разработке модулей .

После того, как вы все настроите, ваш код для доступа к полям записи будет выглядеть примерно так:

class stock_incoterms(osv.osv):
    # ...

    def do_something(self, cr, uid, ids):
        for stock_incoterm in self.browse(cr, uid, ids):
            name = stock_incoterm.name

            # ...
0 голосов
/ 19 апреля 2012

Изучите код OpenERP, затем: -)

Другие хорошие отправные точки включают в себя:

Все сводится к использованию средств самоанализа Python для определения структуры объектов, предоставленных пользователем, и преобразования этой структурынапример, определения таблиц SQL и запросы.

В yams объект Schema создается пользовательскими классами, которые наследуются от EntityType, который имеет метакласс metadefinition.Этот метакласс перечисляет атрибуты класса EntityType и сохраняет их в различных внутренних полях.Затем модуль schema2sql можно использовать для сериализации схемы в виде набора таблиц SQL.

...