附件未从网站 odoo 12 保存在后端

attachments are not being saved on backend from website odoo 12

我想在网站上编辑一个名为我的信息的表格时添加附件,我想将附件保存在后台。我在附件表单中添加了输入字段,但在保存表单时我没有在后端获取附件。 这是我的代码:-

模板文件:-

<div class="form-group row">
     <div class="col-lg-3 col-md-4">
      <label class="control-label" for="Attachments">
       Attach Files
      </label>
     </div>
     <div class="col-lg-7 col-md-12">
       <input id='attachment' type="file"
       class="form-control o_website_form_input"
       name="attachment" multiple="true"
       data-show-preview="true"                                                                          
       accept="application/pdf"/>
      </div>
</div>

控制器文件:-

@route(['/path/to/template'], type='http', auth='public', website=True)
def account(self, redirect=None, **post):
    values = self._prepare_portal_layout_values()
    User = request.env.user
    partner = User.partner_id
    
    if post:

        print("post::::::::::::::::::::::", post, values)
        attachment_ids = []
        attachment_list = request.httprequest.files.getlist('attachment')
        print("attachment_list::::::::::::::::", attachment_list)
        for att in attachment_list:
            if post.get('attachment'):
                attachments = {
                    'res_name': att.filename,
                    'res_model': 'res.partner',
                    'res_id': partner.sudo().id,
                    'datas': base64.encodestring(att.read()),
                    'type': 'binary',
                    'datas_fname': att.filename,
                    'name': att.filename,
                }
                attachment_obj = http.request.env['ir.attachment']
                att_record = attachment_obj.sudo().create(attachments)
                attachment_ids.append(att_record.id)
        if attachment_ids:
            values.update({'attachment_ids': [(6, 0, attachment_ids)]})

所以谁能告诉我我缺少什么?

enctype 属性指定用于向服务器提交表单的内容类型(当方法的值为 post 时)。此属性的默认值为 application/x-www-form-urlencoded.

multipart/form-data 应与 INPUT 元素结合使用,type="file".

您需要将 enctype 设置为 multipart/form-data 才能使用 file 类型的 input

您可以在 web_editor 模块中找到示例:

<form class="form-inline"
            method="POST"
            action="/web_editor/attachment/add"
            enctype="multipart/form-data"

类型文件的输入定义如下:

<input type="file" class="d-none" name="upload" t-att-accept="widget.accept" multiple="multiple"/>

文件是从 request object 恢复的(就像您所做的那样):

request.httprequest.files.getlist('upload')

编辑:

加密类型

内容类型 application/x-www-form-urlencoded 发送大量二进制数据或包含 non-ASCII 个字符的文本时效率低下。内容类型 multipart/form-data 应该用于提交包含文件、non-ASCII 数据和二进制数据的 forms

倍数=布尔值

表示是否允许用户指定多个值。

在HTML中,您可以简单地使用最小化形式multiple,但在Odoo模板中,Odoo会引发一个XMLSyntaxError:

XMLSyntaxError: Specification mandates value for attribute multiple  

Boolean attributes 可以合法地取一个值:属性本身的名称(例如,multiple="multiple")。

它们出现在元素的开始标记中意味着该属性的值为 true。他们的缺席意味着价值 false

multiple 属性的值设置为 multiple 或 ``true` 会得到相同的结果。