
本教程详细讲解如何在odoo自定义模块中,通过在视图中添加按钮,实现用户点击后从服务器下载预设的静态文件(如pdf、xlsx)。文章将涵盖文件存放的最佳实践、按钮方法的实现逻辑,以及如何利用ir.actions.act_url动作类型来触发文件下载,确保操作流程清晰且易于部署。
在Odoo自定义模块开发中,有时需要提供一个功能,允许用户通过点击界面上的按钮来下载存储在服务器上的静态文件,例如操作手册、报告模板或附件。本文将详细指导您如何在Odoo 14社区版(或其他兼容版本)中实现这一功能。
Odoo模块化的设计要求静态文件(如图片、CSS、JS、文档等)应放置在模块的特定子目录中,以便Odoo能够正确地识别和提供这些资源。对于可供客户端下载的静态文件,推荐将其放置在模块的static目录下。
典型的文件路径结构如下:
your_module_name/
├── __init__.py
├── __manifest__.py
├── models/
│ └── models.py
├── views/
│ └── views.xml
└── static/
└── src/
└── documents/
└── manual.pdf
└── template.xlsx在这个例子中,manual.pdf 和 template.xlsx 是我们希望用户下载的静态文件。src/documents/ 是一个可选的子目录,用于更好地组织文件。
首先,您需要在自定义视图(例如表单视图或列表视图)中添加一个按钮,该按钮将触发文件下载操作。这个按钮通常会调用一个Python方法。
在您的XML视图文件(例如views/views.xml)中,可以这样定义一个按钮:
<record id="view_your_model_form" model="ir.ui.view">
<field name="name">your.model.form</field>
<field name="model">your.model</field>
<field name="arch" type="xml">
<form string="Your Model">
<header>
<!-- 其他按钮或状态字段 -->
<button name="download_manual_document" type="object" string="下载操作手册" class="oe_highlight"/>
</header>
<sheet>
<!-- 模型字段定义 -->
</sheet>
</form>
</field>
</record>接下来,在您的自定义模型(例如models/models.py)中,需要实现与按钮name属性对应的Python方法。这个方法的核心是返回一个特殊字典,该字典指示Odoo执行一个URL重定向动作。
from odoo import models, fields, api
class YourModel(models.Model):
_name = 'your.model'
_description = 'Your Custom Model'
name = fields.Char(string="Name")
# ... 其他字段
def download_manual_document(self):
"""
按钮点击后,触发下载静态文件的方法。
"""
# 构造静态文件的URL路径
# 路径格式为 /your_module_name/static/path/to/your_file.extension
file_url = '/your_module_name/static/src/documents/manual.pdf'
# 返回一个ir.actions.act_url类型的动作
return {
'type': 'ir.actions.act_url', # 指定动作类型为URL重定向
'url': file_url, # 要重定向到的URL,即静态文件的路径
'target': 'self', # 'self'表示在当前窗口/标签页打开,'new'表示在新窗口/标签页打开
}
def download_excel_template(self):
"""
示例:下载另一个静态文件(如XLSX)。
"""
file_url = '/your_module_name/static/src/documents/template.xlsx'
return {
'type': 'ir.actions.act_url',
'url': file_url,
'target': 'new', # 示例在新标签页打开
}关键点解释:
为了更清晰地展示,我们将上述代码片段整合到一起。
your_module_name/__manifest__.py
{
'name': 'Your Custom Module',
'version': '1.0',
'summary': 'A module to demonstrate static file download',
'category': 'Tools',
'depends': ['base'],
'data': [
'security/ir.model.access.csv', # 如果有模型,通常需要访问权限
'views/views.xml',
],
'installable': True,
'application': True,
'auto_install': False,
'license': 'LGPL-3',
}your_module_name/models/models.py
from odoo import models, fields, api
class YourModel(models.Model):
_name = 'your.model'
_description = 'Your Custom Model'
name = fields.Char(string="Name", required=True)
description = fields.Text(string="Description")
def download_manual_document(self):
"""
按钮点击后,触发下载静态文件的方法。
"""
file_url = '/your_module_name/static/src/documents/manual.pdf'
return {
'type': 'ir.actions.act_url',
'url': file_url,
'target': 'new', # 推荐在新标签页打开
}
def download_excel_template(self):
"""
示例:下载另一个静态文件(如XLSX)。
"""
file_url = '/your_module_name/static/src/documents/template.xlsx'
return {
'type': 'ir.actions.act_url',
'url': file_url,
'target': 'new',
}your_module_name/views/views.xml
<odoo>
<!-- 菜单项,用于访问您的模型 -->
<menuitem id="menu_your_model_root" name="文件下载示例" sequence="10"/>
<menuitem id="menu_your_model_action" parent="menu_your_model_root"
name="管理文件" action="action_your_model"/>
<!-- 动作定义 -->
<record id="action_your_model" model="ir.actions.act_window">
<field name="name">Your Model</field>
<field name="res_model">your.model</field>
<field name="view_mode">tree,form</field>
</record>
<!-- 树视图 -->
<record id="view_your_model_tree" model="ir.ui.view">
<field name="name">your.model.tree</field>
<field name="model">your.model</field>
<field name="arch" type="xml">
<tree string="Your Model">
<field name="name"/>
<field name="description"/>
</tree>
</field>
</record>
<!-- 表单视图 -->
<record id="view_your_model_form" model="ir.ui.view">
<field name="name">your.model.form</field>
<field name="model">your.model</field>
<field name="arch" type="xml">
<form string="Your Model">
<header>
<button name="download_manual_document" type="object" string="下载操作手册 (PDF)" class="oe_highlight"/>
<button name="download_excel_template" type="object" string="下载模板 (XLSX)" class="oe_link"/>
</header>
<sheet>
<group>
<field name="name"/>
<field name="description"/>
</group>
</sheet>
</form>
</field>
</record>
</odoo>your_module_name/static/src/documents/manual.pdf (一个实际的PDF文件) your_module_name/static/src/documents/template.xlsx (一个实际的XLSX文件)
通过以上步骤,您可以在Odoo自定义模块中轻松实现按钮点击下载静态文件的功能。核心在于将静态文件放置在模块的static目录下,并在按钮对应的Python方法中返回一个ir.actions.act_url类型的字典,指定正确的URL路径。这种方法简洁高效,是Odoo开发中处理静态文件下载的标准实践。
以上就是Odoo自定义模块中实现按钮点击下载静态文件教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号