【问题标题】:How can I create an Odoo/OpenERP product instance in Python, interactively?如何以交互方式在 Python 中创建 Odoo/OpenERP 产品实例?
【发布时间】:2014-08-05 16:20:05
【问题描述】:

我想以交互方式创建新的 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)示例,但到目前为止运气不佳。

【问题讨论】:

    标签: python openerp odoo


    【解决方案1】:

    ERPpeek 使这变得容易得多。

    $ sudo pip install erppeek
    $ erppeek --server ... -d ... -u ... -p ... --verbose
    
    >>> prod = model('product.product')
    >>> prod.create({ 'name': 'Test Produkt'})
    

    【讨论】:

      【解决方案2】:

      OpenERP 的“ORM”有点棘手,而且文档很少。

      但是,我们可以阅读资料并理解,期待什么样的魔法:

      # 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'})
      

      【讨论】:

      • 我遇到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 是徒劳的。
      • @KasperSouren,这意味着模型池初始化不正确。 db, pool = openerp.pooler.get_db_and_pool('dbname') 的输出是什么?
      • db, pool = openerp.pooler.get_db_and_pool('dbname') 很慢,但现在更快了,不知道为什么。 db, pool 给了我(<openerp.sql_db.Connection at 0x2aa0850>, <openerp.modules.registry.Registry at 0x2a7fa90>) (仍然遇到同样的错误。)(我应该把它变成一个单独的问题吗?)
      • @KasperSouren,这里是池输出的示例pastebin.com/zNdTXiPk.. 你是否看到相同的消息,大约加载了 30 个基本模块?
      • 如何获得该输出?
      【解决方案3】:

      另一种以交互方式和远程方式使用 OpenERP/Odoo orm 的方法是使用 Openerp Proxylib/cli。它有 IPython shell,以及交互式处理 OpenERP/Odoo 数据的工具。

      在你第一次安装并运行 openerp_proxy shell:

      $ 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'})
      

      (更多信息请阅读docs

      (并且在未来的版本中将实现一些语法糖)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多