如何将apk文件上传为二进制字段并在odoo中以相同的文件名下载它
How to upload apk file as binary field and download it with same file name in odoo
我需要一个接受上传 android .apk 文件的表格。并以相同的名称下载它。
这是我的开头
# model.py
class AppVersion(models.Model):
# ...
apk_file = fields.Binary('Apk file', filters='*.apk', required=True)
但在 odoo-14 中,filters
参数不再起作用。它接受所有类型的文件。
上传完成后,下载按钮会给我一个 zip 文件。
经过一些源代码研究,我找到了解决方案:
问题 1:仅 accpet .apk 文件
在二进制字段中添加 options
属性 accepted_file_extensions
属性。
问题 2:下载同名文件
在模型中添加一个新的字符字段来保存文件名,将其绑定到具有filename
属性的二进制字段。并且不要忘记将新字段添加到表单视图中(设置为 invisible
)
代码
# model
class AppVersion(models.Model):
# ...
apk_file = fields.Binary('Apk file', store=True, attachment=False, required=True)
apk_fname = fields.Char(string='File name')
<!--form view-->
<field name="apk_file" widget="binary" options="{'accepted_file_extensions': '.apk'}" filename="apk_fname"/>
<field name="apk_fname" invisible="1"/>
成功结果
我需要一个接受上传 android .apk 文件的表格。并以相同的名称下载它。
这是我的开头
# model.py
class AppVersion(models.Model):
# ...
apk_file = fields.Binary('Apk file', filters='*.apk', required=True)
但在 odoo-14 中,filters
参数不再起作用。它接受所有类型的文件。
上传完成后,下载按钮会给我一个 zip 文件。
经过一些源代码研究,我找到了解决方案:
问题 1:仅 accpet .apk 文件
在二进制字段中添加 options
属性 accepted_file_extensions
属性。
问题 2:下载同名文件
在模型中添加一个新的字符字段来保存文件名,将其绑定到具有filename
属性的二进制字段。并且不要忘记将新字段添加到表单视图中(设置为 invisible
)
代码
# model
class AppVersion(models.Model):
# ...
apk_file = fields.Binary('Apk file', store=True, attachment=False, required=True)
apk_fname = fields.Char(string='File name')
<!--form view-->
<field name="apk_file" widget="binary" options="{'accepted_file_extensions': '.apk'}" filename="apk_fname"/>
<field name="apk_fname" invisible="1"/>