odoo12附件上传方式

Odoo附件上传指南

odoo附件上传的方式

1.下载 odoo 自带模块

在应用里搜索附件列出以及文档索引,安装模块即可

2.在模型类中和视图中添加相应代码

  • 方式一:

在模型中添加如下代码

attachment_number = fields.Integer(compute='_compute_attachment_number', string='附件上传')

@api.multi
def _compute_attachment_number(self):
    """附件上传"""
    attachment_data = self.env['ir.attachment'].read_group(
        [('res_model', '=', 'purchase.contract'), ('res_id', 'in', self.ids)], ['res_id'], ['res_id'])
    attachment = dict((data['res_id'], data['res_id_count']) for data in attachment_data)
    for expense in self:
        expense.attachment_number = attachment.get(expense.id, 0)

@api.multi
def action_get_attachment_view(self):
    """附件上传动作视图"""
    self.ensure_one()
    res = self.env['ir.actions.act_window'].for_xml_id('base', 'action_attachment')
    res['domain'] = [('res_model', '=', 'purchase.contract'), ('res_id', 'in', self.ids)]
    res['context'] = {'default_res_model': 'purchase.contract', 'default_res_id': self.id}
    return res

注意: 将代码中对应红框中的模型改为你自己的模型名字即可

xml文件中添加如下代码

<div class="oe_button_box" name="button_box">
  <button name="action_get_attachment_view" class="oe_stat_button" icon="fa-book" type="object">
      <field name="attachment_number" widget="statinfo" string="附件上传"/>
  </button>
</div>
  • 方式二:

在模型中添加如下代码

@api.multi
def attachment_image_preview(self):
    """附件上传 第二种方式"""
    self.ensure_one()
    # domain可以过滤指定的附件类型 (mimetype)
    domain = [('res_model', '=', self._name), ('res_id', '=', self.id)]
    return {
        'domain': domain,
        'res_model': 'ir.attachment',
        'name': u'附件管理',
        'type': 'ir.actions.act_window',
        'view_id': False,
        'view_mode': 'kanban,tree,form',
        'view_type': 'form',
        'limit': 20,
        'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, self.id)
    }

xml文件中添加如下代码

<div class="oe_button_box" name="button_box">
   <button name="attachment_image_preview" type="object" class="oe_stat_button" icon="fa-image">
         <div class="o_stat_info">
             <span class="o_stat_text">附件管理</span>
         </div>
   </button>
</div>
<think>好的,我现在需要帮助用户解决在Odoo 17中设置或修改上传文件大小的限制的问题。首先,我需要回忆一下Odoo的相关知识,尤其是文件上传方面的配置。 我记得Odoo是基于Python的,使用了一些架比如Django的某些理念,不过具体的配置可能和Django不同。用户提到的Odoo 17,所以需要确认当前版本的配置方法是否有变化。 首先,文件上传限制通常和Web服务器有关,比如Odoo默认使用内置的服务器,也可能部署在Nginx或Apache后面。用户的问题可能涉及两个方面:Odoo自身的配置和反向代理的配置。 接下来,我需要回想Odoo的参数设置。Odoo的配置文件(通常是.conf文件)中有很多参数可以调整。有没有关于附件大小的参数呢?比如,`limit_request_content_length`这个参数可能控制请求体的大小,从而限制上传文件的大小。默认情况下,这个值可能比较小,比如设置为16384 KB(16MB),用户可能需要调整这个值。 然后,如果用户使用了Nginx作为反向代理,还需要在Nginx的配置中设置`client_max_body_size`,否则即使Odoo允许上传,Nginx可能会拒绝较大的文件。同样的,Apache也有类似的配置,比如`LimitRequestBody`。 另外,用户可能还需要考虑数据库的存储限制,比如PostgreSQL的配置,但一般情况下这可能不是主要问题,因为Odoo处理附件存储的方式通常是将文件存储在文件系统中或数据库中,但上传时的限制主要是由应用服务器或反向代理控制的。 现在需要将这些步骤整理成清晰的步骤说明,确保用户能够按照指导进行操作。同时,需要验证这些信息是否正确,特别是针对Odoo 17是否有变化。比如,检查Odoo的官方文档或社区讨论,确认`limit_request_content_length`是否仍然适用。 此外,可能需要提醒用户在修改配置后重启Odoo服务和Web服务器(如Nginx或Apache)以使更改生效。同时,注意单位转换,比如将100MB转换为字节或千字节,确保参数设置正确。 最后,生成相关问题,帮助用户进一步了解相关配置,比如如何自定义错误提示、优化存储性能等。</think>在Odoo 17中设置上传文件大小限制需要通过以下步骤完成: ### 1. 修改Odoo服务端配置 在Odoo配置文件(如`odoo.conf`)中添加参数: $$limit_request_content_length = 104857600$$ # 单位:字节(示例设置为100MB) 此参数控制HTTP请求体最大容量[^1]。 ### 2. 配置反向代理(以Nginx为例) 在Nginx配置文件中添加: ```nginx client_max_body_size 100M; # 与Odoo配置保持一致 ``` ### 3. 重启服务 ```bash # 重启Odoo sudo systemctl restart odoo # 重启Nginx sudo systemctl restart nginx ``` ### 4. 验证附件模型(可选) 对于自定义附件处理,可在模型中添加约束: ```python from odoo import models, fields, api class CustomAttachment(models.Model): _inherit = 'ir.attachment' @api.constrains('datas') def _check_file_size(self): for record in self: if len(record.datas) > 100 * 1024 * 1024: # 100MB验证 raise ValidationError("文件大小超过限制") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值