【问题标题】:Odoo - scaffolding?Odoo - 脚手架?
【发布时间】:2014-08-14 15:55:33
【问题描述】:

我读过here,您可以使用命令搭建模块,因此您无需手动创建一些初始文件。但是这样的命令在 master 上不起作用(在 Odoo 开发分支上):

./oe scaffold Academy ../my-modules

因为在 openerp 目录中没有名为oe 的文件。这个东西在最新版本中有变化吗?如何在 Odoo 中搭建模块?

【问题讨论】:

  • 请告诉我您在哪个路径上编写此命令。因为之前它是写在服务器目录上的,但现在 oe 文件在 odoo 目录中可用,所以如果您从 github.com/odoo/odoo 下载,那么它会在 odoo 本身中显示 oe 文件。
  • 是的,我从那里下载的。并试图从odoo运行,但没有一个名为oe的文件。我应该如何从 odoo 目录运行?
  • 很抱歉,odoo/odoo 中尚未更新,但如果您只想学习,可以从这里使用旧的 openerp,服务器:code.launchpad.net/~openerp/openobject-server/trunk Addons:code.launchpad.net/~openerp/openobject-addons/trunk Web: code.launchpad.net/~openerp/openerp-web/trunk
  • 感谢更新。重点是我想学习 Odoo 中的所有新东西 :)。所以我想我需要手动创建初始文件或自己编写一些脚本。

标签: odoo scaffold


【解决方案1】:

现在 odoo 10 或更高版本使用 odoo-bin insted of odoo.py

  1. 在 shell 或终端上,将目录更改为您的 odoo 文件夹。可能在/opt/odoo,也可能在/home/odoo

    cd /opt/odoo
    
  2. 使用 odoo.py 脚本创建一个新模块:

    ./odoo.py scaffold my_new_module ./addons/
    

(其中 my_new_module 是新模块的名称,./addons/ 是 Odoo 插件目录)

  1. 编辑 ./addons/my_new_module/__openerp__.py 文件。

    nano ./addons/my_new_module/__openerp__.py
    
  2. 更改名称字段以设置模块的用户友好名称(例如“Andrius 的新模块”)。更改描述和字段也。并将您需要的模块(例如“邮件”)添加到模块依赖项列表中。

    'depends': ['base', 'mail'],
    
  3. 编辑models.py

    nano ./addons/my_new_module/models.py
    
  4. 在您的 my_new_module/models.py 文件中添加代码,例如:

from openerp import models, api

class FooterlessNotification(models.Model)
    _inherit = 'mail.notification'

    @api.model
    def get_signature_footer(self, user_id, res_model=None, res_id=None, context=None, user_signature=True):
        return ""

(例如,此代码将扩展“mail.notification”模型并将其 get_signature_footer 方法替换为返回空页脚的方法。)

  1. 通过 Odoo 设置安装您的模块。

要在那里找到它,您可能需要使用“更新模块列表”选项。

如果您也找不到“更新模块列表”选项,您可能需要在当前用户的设置中启用“技术功能”复选框。

要显示模块,而不仅仅是应用程序,请从搜索框过滤器中删除标签“应用程序”,方法是单击标签前的小“x”。

【讨论】:

  • Odoo CE v11+ 的文件名__openerp__.py 可能会更改它应该是:__manifest__.py
【解决方案2】:

你可以使用 ./odoo-bin scaffold MODULE_NAME PATH_TO_STORE_YOUR_MODULE_OR_ADDONS

例如: ./odoo-bin scaffold module_name /odoo/odoo-server/custom_addons/

这里 custom_addons 是您在 odoo-server/ 中的目录

Odoo10 中的cmd:

./odoo-bin scaffold <module_name> <destination path where you want to create> 

【讨论】:

  • 刚需的须藤
【解决方案3】:

使用odoo.py 代替oe

./path/to/odoo/odoo.py scaffold my-module

【讨论】:

    【解决方案4】:

    从 odoo 文档中创建模块的正确方法如下:

    odoo.py scaffold [name of module] [desired path of module]
    

    另外我建议你为你的模块使用不同的插件路径,不要使用 odoo/addons,你可以在你想要的地方创建一个新目录,然后将此目录添加到 odoo 配置或从启动时使用此插件执行 odoo

    odoo.py --addons-path=[full path to your dir]
    

    【讨论】:

      【解决方案5】:

      我已经在 AWS 的 /opt/odoo 目录中安装了 ODOO 9。

      所以首先我改变目录:

       cd /opt/odoo
      

      然后执行:

       odoo.py scaffold modulename ./addons/
      

      给出以下错误消息:

       odoo.py command not found
      

      对我有用的正确命令是:

       sudo python odoo.py scaffold modulename ./addons/
      

      希望这会有所帮助。

      【讨论】:

      • 或 ./odoo.py 脚手架模块名 ./addons/
      【解决方案6】:

      ./"odoo.py 文件的路径"/odoo.py scaffold my-module ./"你的新插件的路径"/

      用你的路径替换 qoutes

      【讨论】:

        【解决方案7】:

        另一个版本

        \###### begin ########
        
        import sys
        
        from openerp.cli import scaffold
        
        sf = scaffold.Scaffold()
        
        sf.run (sys.argv[1:])
        
        \####### end #########
        

        将顶部的脚本保存到您的openerp 文件夹。然后执行:

        $ python (your-script-name) --help
        

        或:

        $ python (the-script-name) --init Academy --dest my-modules --model academy --controller academy --web --theme
        

        【讨论】:

        • JustinJDavies,感谢您的编辑。还请删除 cmets 行开头的 \。
        【解决方案8】:

        你是作为源还是包安装的。

        对于你需要做的来源

        ./odoo.py scaffold [module_name] [where_to_put_it]
        

        如果从包中你需要做的

         odoo.py scaffold [module_name] [where_to_put_it]
        

        [where_to_put_it] 通常是您的插件路径,您的插件路径可能会根据您的安装方法而有所不同。

        无需在插件文件夹中创建模块。 但建议这样做。您可以通过

        添加新的插件路径
        odoo.py --addons-path=[where_to_put_it]
        

        用于模块结构reference 和构建模块。

        【讨论】:

          【解决方案9】:

          在某些情况下,需要将 Odoo python 文件传递​​给 Python 应用程序执行。

          python odoo.py scaffold modulename addons-path
          

          【讨论】:

            【解决方案10】:

            我建议您迈出 Git 克隆 odoo 的第一步。创建一个目录/文件夹,然后在您的目录/文件夹上 Git 克隆 odoo。运行之后,Python odoo.py 脚手架插件 test123。将或模块放在目录/文件夹插件上,以确保 odoo 可以读取您的模块。

            【讨论】:

              【解决方案11】:

              转到终端并输入以下命令:

              cd path/to/your/odoo-version/
              
              ./odoo-bin scaffold new_module /path/to/your/odoo-version/addons
              

              然后转到 /path/to/your/odoo-version/addons 并刷新,您可以看到“new_module”将出现。

              【讨论】:

                【解决方案12】:

                如果您使用的是 odoo-10 或 11,则不要使用 ./oe scaffold Academy ../my-modules 使用:./odoo-bin scaffold new_module /path/to/your/odoo-version/addons

                如果您使用 odoo8,即 openerp8,请使用 odoo.py scaffold &lt;module name&gt; &lt;where to put it&gt;

                但请确保您位于目录中的正确位置。 还可以在链接中找到教程: https://www.odoo.com/documentation/8.0/howtos/backend.html

                --谢谢

                ABhay S

                【讨论】:

                  【解决方案13】:

                  这是我的答案

                  cd path/to/odoo/odoo-server/
                  

                  然后

                  ./odoo-bin scaffold new_module_name /path/to/custom/addons
                  

                  现在检查 /path/to/custom/addons,您将看到新模块,您可以在其中开始添加内容。

                  【讨论】:

                    【解决方案14】:

                    首先更改您的 odoo 源的目录: /opt/odoo

                    然后写这个命令: ./odoo-bin 脚手架 my_module_name /path-where-to-create

                    示例: ./odoo-bin 脚手架 odoo_module /Desktop/Repository

                    【讨论】:

                      【解决方案15】:

                      我的文件结构:-

                      Odoo |-- 插件 |-- Debian |-- 文档 |-- 设置 |-- 嘟嘟盒

                      要使用脚手架,您必须 cd 到 (Odoo) 文件夹,然后使用此命令

                      python3 odoo-bin 脚手架 name_of_your_module path_of_your_module

                      如果我想在 odoo/addons 创建一个名为 test 的模块

                      我只会使用命令:-

                      python3 odoo-bin 脚手架测试 odoo/addons

                      注意:-

                      • 我没有在文件结构中包含每个文件夹,只是为了给你 一个想法
                      • (python3)这里取决于你的python版本

                      【讨论】:

                        【解决方案16】:

                        在安装在 ubuntu 20.04 上的 Odoo v14 中,我使用

                        odoo scaffold module_name /opt/extra-addons
                        

                        【讨论】:

                        【解决方案17】:

                        这是一个非常简单的答案:

                        如果您使用的是 Odoo v10+,只需使用以下命令:

                        ./odoo-bin scaffold new_module_name
                        

                        如果你在 Odoo.sh 上,你可以这样做:

                        odoo-bin scaffold new_module_name
                        

                        【讨论】:

                          【解决方案18】:

                          我最近写了一篇关于这个主题的博客,并提供了不同的差异和论点,这将有助于维护新的自定义模块开发。

                          https://odedrabhavesh.blogspot.com/2021/09/how-to-create-odoo-custom-module-in-one-command.html

                          【讨论】:

                            【解决方案19】:

                            这段代码可能会有所帮助。将其保存为 moe.py 或任何您想要的。

                            from openerp.cli import scaffold
                            
                            sf = scaffold.Scaffold()
                            
                            #sf.run(["--help"])
                            
                            sf.run (["--init","Academy","--model","academy","--controller","academy","--web","--theme"])
                            

                            我还是 Python 编程的新手。如果有人可以改进向run() 函数发送参数的方式,那就太好了。

                            【讨论】:

                            • 我能有理由不使用这个脚本吗?
                            • 只是猜测...您将其发布为答案,但随后您不得不询问它是否正确或有效。您可能应该没有回答。或者,您可能应该审查过Code Review Stack Exchange 上的代码。一旦你知道代码是正确的,然后在此处提供它作为答案。
                            • 我(当时)提供了我所能提供的最佳答案,并且它在我的环境中正确运行。我没有要求更正。因此,对于寻求或寻求帮助的人来说,它应该是一个答案(或者可能只是一些提示)。但是,是的,正如我提到的我在 Python 编程方面的经验,这段代码效率不高,因为我向函数发送参数的方式。就是这样。
                            • “如果有人可以改进向 run() 函数发送参数的方式,那就太好了”。在我看来,答案还没有准备好使用。但同样,我只是在猜测你为什么被否决。也可能是因为缺少格式(或某种组合)。
                            猜你喜欢
                            • 2020-03-03
                            • 2018-11-22
                            • 1970-01-01
                            • 2014-10-01
                            • 2011-12-20
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2012-05-28
                            相关资源
                            最近更新 更多