附件未从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,attachment_ids)]})

所以有人可以给我一些我想念的东西吗?

解决方法

GIVECHANGE: MOV AH,09H LEA DX,STRCHANGEGIVEN INT 21H MOV AL,TTL ;--move total price into AL TTL=88 SUB TTG,AL ;--use total given - AL TTG = 100 MOV BL,TTG ;-- BL = 100-88 = 12 MOV TTC,BL ;--store result to TTC = 12 MOV AX,0 MOV AL,TTC DIV TEN MOV Q1,AL MOV R1,AH MOV AX,R1 DIV TEN MOV Q2,AL MOV R2,AH ADD Q2,30H ADD R2,30H ADD R1,30H MOV AH,02H MOV DL,Q2 INT 21H MOV AH,R2 INT 21H MOV AH,R1 INT 21H 属性指定用于向服务器提交表单的内容类型(方法的值为enctype时)。此属性的默认值为post

application/x-www-form-urlencoded应该与multipart/form-data元素INPUT结合使用。

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

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

file

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

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

request object中恢复文件(就像您一样):

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

编辑:

编码

内容类型request.httprequest.files.getlist('upload') 对于发送大量的二进制数据或包含非ASCII字符的文本效率不高。内容类型application/x-www-form-urlencoded用于提交forms,其中包含文件,非ASCII数据和二进制数据。

多个=布尔值

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

在HTML中,您可以简单地使用最小化形式multipart/form-data,但在Odoo模板中,Odoo将引发multiple

XMLSyntaxError

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

它们出现在元素的开始标记中表示该属性的值为XMLSyntaxError: Specification mandates value for attribute multiple 。如果缺少它们,则表示值为true

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...