如何将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"/>

成功结果