Как я могу создать экземпляр продукта Odoo/OpenERP в Python в интерактивном режиме?

Я хочу интерактивно создать новый продукт Odoo/OpenERP. Я дошел до импорта аддона:

python

>>> import openerp
>>> openerp.tools.config.parse_config(['--addons-path=addons'])
>>> from openerp.addons.product import product
>>> p = new product.product_product()
SyntaxError: invalid syntax

>>> p = product.product_product()
>>> type(p)
NoneType   # no luck here either

# And then there is...

>>> product.product_product.create()

TypeError: unbound method create() must be called with product_product instance as first argument (got nothing instead)

# Ok I get that, but how do I create a product_product instance?

# And this one is not very clear either:

>>> product.product_product.create_instance()

TypeError: create_instance() takes exactly 3 arguments (1 given)

Но строка документации create_instance, к сожалению, не очень полезна, а ack-grep create_instance не дает мне никаких результатов в каталоге дополнений.

Я искал хорошие примеры osv (Odoo ORM), но пока не очень повезло.


person kqw    schedule 14.07.2014    source источник


Ответы (3)


ERPpeek делает это намного проще.

$ sudo pip install erppeek
$ erppeek --server ... -d ... -u ... -p ... --verbose

>>> prod = model('product.product')
>>> prod.create({ 'name': 'Test Produkt'})

Снимок экрана ERPpeek

person kqw    schedule 29.07.2014

«ORM» OpenERP немного сложна и плохо документирована.

Однако мы можем читать источники и понимать, какой магии ждать:

# 1. Set modules path, like done above. 
import openerp
openerp.tools.config.parse_config(['--addons-path=addons'])

# 2. Obtain cursor and pool of models. 
db, pool = openerp.pooler.get_db_and_pool('dbname')

# 3. Import the model, that you want to create, like done above. 
from openerp.addons.product import product

# 4. Initialize database cursor
curr = db.cursor()

# 5. Create an instance of the model
p = product.product_product.create_instance(pool, curr)

# 6. Now create a model with values
product.product_product.create(p, curr, 1, {'name':'Test2'})
person Nikolay Fominyh    schedule 15.07.2014
comment
Я столкнулся с TypeError: The model "product.product" specifies an unexisting parent class "mail.thread" You may need to add a dependency on the parent class' module. Пытался from openerp.addons.mail import mail напрасно. - person kqw; 15.07.2014
comment
@KasperSouren, значит неправильно инициализировался пул моделей. Каков результат db, pool = openerp.pooler.get_db_and_pool('dbname') ? - person Nikolay Fominyh; 15.07.2014
comment
db, pool = openerp.pooler.get_db_and_pool('dbname') работал очень медленно, но теперь работает быстрее, не знаю почему. db, pool дает мне (<openerp.sql_db.Connection at 0x2aa0850>, <openerp.modules.registry.Registry at 0x2a7fa90>) (Все еще получаю ту же ошибку с этим.) (Должен ли я превратить это в отдельный вопрос?) - person kqw; 15.07.2014
comment
@KasperSouren, вот пример вывода пула pastebin.com/zNdTXiPk.. Вы видите то же сообщение, что и о Загружено 30 базовых модулей? - person Nikolay Fominyh; 15.07.2014
comment
Как мне получить этот вывод? - person kqw; 15.07.2014
comment
Я начал stackoverflow.com/questions/24757276/ - person kqw; 15.07.2014

Еще один способ работать с OpenERP/Odoo orm в интерактивном и удаленном режиме — использовать Openerp Proxy lib/ кли. Он имеет оболочку IPython и инструменты для интерактивной работы с данными OpenERP/Odoo.

В вашей первой установке и запуске оболочки openerp_proxy:

$ pip install openerp_proxy
$ openerp_proxy

затем подключитесь к базе данных:

>>> db = session.connect()  # all connection related info will be asked here

и создайте продукт:

>>> product_obj = db['product.product']  # get product model
>>> product_id = product_obj.create({'name': 'My cool product'})

(дополнительную информацию см. в документах)

(И в будущих версиях будет реализован некоторый синтаксический сахар)

person FireMage    schedule 05.08.2014