跳转至内容
  • Odoo的Binary字段如何设置默认值?

    Odoo 培训 binary field odoo技术
    1
    0 赞同
    1 帖子
    1k 浏览
    D
    Odoo的Binary字段默认保存的是Base64转码后的字符串。那么我们该如何为Binary字段设置默认值呢?比如一个默认的图片。答案当然是将图片文件的内容用Base64转码后赋给这个字段的default属性。 方法1 : 比如你可以把一个图片用在线工具转码为Base64格式字符串: data:image/png;base64,iVRORw0KGgoBBBNSUhEUgAAAAEAAAABCAIAAACQd1PeAAAA..................... 去掉头部的data:image/png;base64,信息,把剩余的内容保存为默认值 DEFAULT_IMG = 'iVRORw0KGgoBBBNSUhEUgAAAAEAAAABCAIAAACQd1PeAAAA.....................' class MyModel(models.Model): _name = 'my.model' field_binary = fields.Binary(default=DEFAULT_IMG) 方法2: 将图片文件保存在模块目录下,比如: /my_module/static/img/my_image.png 设置默认值: import base64 from odoo import models, fields from odoo import modules def get_default_img(): with open(modules.get_module_resource('my_module', 'static/img', 'my_image.png'), 'rb') as f: return base64.b64encode(f.read()) class MyModel(models.Model): _name = 'my.model' field_binary = fields.Binary(default=get_default_img())
  • Odoo的Binary字段如何保存文件名

    Odoo 培训 odoo技术 binary field
    1
    0 赞同
    1 帖子
    1k 浏览
    D
    我们定义一个fields.Binary类型的字段就可以上传文件并保存。但是,这仅仅保存了文件的内容,下载时的文件的名称为该模型的名称而不是原上传文件的文件名。我们在代码中也无法引用该上传文件的文件名。那我们如何才能做到既保存上传文件的文件内容又保存其文件名呢? 首先, 我们要另外定义一个保存文件名的字符字段,比如 test_img = fields.Binary('Test Image') test_img_file_name = fields.Char('File name') 然后在视图中跟Binary字段做关联: <field name="test_img" filename="test_img_file_name"/> <field name="test_img_file_name" invisible="1"/>
  • 如何下载Odoo的Binary字段的文件内容

    Odoo 培训 binary field odoo技术
    1
    1
    0 赞同
    1 帖子
    1k 浏览
    D
    这个问题似乎很奇怪,当然是在对象表单视图的对应字段上点击那个下载按钮: [image: 1572574611168-image_btn.png] 但是,比如我有一个需求,需要创建一个下载所有的对象的Binary字段中的文件的页面,该如何做呢? 实际上对象上的Binary对象的链接是下面这样的: http://127.0.0.1:8069/web/content?model=<module_name>&field<field_name>&filename_field=<field_filename>&id=<object_id> 其中: module_name - Binary字段对应的模型名称 field_name - Binary字段的名称 object_id - 对应的记录id. field_filename - Binary字段对应的文件名称的字段(非必选项) 所以我们要创建一个按钮,点击下载文件的代码如下: file_url = "http://127.0.0.1:8069/web/content?model=<module_name>&field=<field_name>&filename_field=<field_filename>&id=<object_id>" return { 'type': 'ir.actions.act_url', 'url': file_url, 'target': 'new' } 而在Qweb报表或web页面中,我们可以这样处理: <t t-foreach="files" t-as="f"> <tr> <td><t t-esc="f.name"/></td> <td><a t-attf-href="/web/content?model=<module_name>&field=<field_name>&filename_field=<field_filename>&id=<object_id>">Download</a></td> </tr> </t>