用odoo写,创建一个按钮弹出窗体,在窗体内可以上传文件,确认时将上传的文件写入模型的明细中
时间: 2024-05-15 19:16:55 浏览: 98
1. 首先,在Odoo中创建一个模型,例如命名为"my.model",并在其中添加一个名为"my_file"的字段,用于存储上传的文件。
2. 在该模型的视图中添加一个按钮,用于触发弹出窗口的操作。
3. 在模型的Python代码中,编写一个方法,用于处理按钮点击事件并弹出窗口。在该方法中,创建一个新视图,用于显示上传文件的窗口,并在窗口中添加一个文件上传字段。
4. 在窗口视图的XML文件中,定义上传文件字段的名称、标签、类型和限制条件等。
5. 在窗口视图的XML文件中,添加一个确认按钮,用于将上传的文件保存到模型的明细中。在该按钮的处理方法中,通过调用模型的write方法,将上传的文件写入到模型的my_file字段中。
6. 在模型的Python代码中,将新创建的方法与按钮的点击事件绑定,以便在按钮被点击时弹出窗口。
下面是示例代码:
1. 模型代码:
```python
from odoo import models, fields, api
class MyModel(models.Model):
_name = 'my.model'
my_file = fields.Binary(string='Uploaded File')
@api.multi
def upload_file_popup(self):
return {
'name': 'Upload File',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'my.model.file.upload',
'target': 'new',
}
```
2. 窗口视图代码:
```xml
<odoo>
<data>
<record id="my_model_file_upload" model="ir.ui.view">
<field name="name">my.model.file.upload</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form string="Upload File">
<group>
<field name="my_file" string="Select File" widget="binary" filename="my_file_name"/>
</group>
<footer>
<button string="Save" type="object" name="save_uploaded_file"/>
<button string="Cancel" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>
```
3. 窗口视图Python代码:
```python
from odoo import models, fields, api
class MyModelFileUpload(models.TransientModel):
_name = 'my.model.file.upload'
my_file = fields.Binary(string='Uploaded File', required=True)
my_file_name = fields.Char(string='File Name', required=True)
@api.multi
def save_uploaded_file(self):
active_id = self._context.get('active_id')
my_model = self.env['my.model'].browse(active_id)
my_model.write({
'my_file': self.my_file,
})
return {'type': 'ir.actions.act_window_close'}
```
4. 视图代码:
```xml
<odoo>
<data>
<record id="my_model_form_view" model="ir.ui.view">
<field name="name">my.model.form</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form string="My Model Form">
<header>
<button string="Upload File" type="object" name="upload_file_popup"/>
</header>
<sheet>
<group>
<field name="my_file"/>
</group>
</sheet>
</form>
</field>
</record>
</data>
</odoo>
```
阅读全文