Python 为什么ODOO9中的瞬态模型中缺少二进制文件名字段?

Python 为什么ODOO9中的瞬态模型中缺少二进制文件名字段?,python,xml,python-2.7,odoo,odoo-9,Python,Xml,Python 2.7,Odoo,Odoo 9,我创建了一个TransientModel,它有一个二进制字段,需要一个ZIP文件,因此我想使用它的文件名来检查用户上传的文件实际上是一个ZIP文件。因此,我一如既往地: 代码 XML <field name="filename" invisible="0"/> <field name="source_file" widget="binary" filename="filename"/> <button name="import_zip" string="Impor

我创建了一个
TransientModel
,它有一个二进制字段,需要一个ZIP文件,因此我想使用它的文件名来检查用户上传的文件实际上是一个ZIP文件。因此,我一如既往地:

代码

XML

<field name="filename" invisible="0"/>
<field name="source_file" widget="binary" filename="filename"/>

<button name="import_zip" string="Import" type="object" class="oe_highlight"/>
目的

拒绝非压缩文件。或者至少读取字段
filename

问题

filename
字段始终为
False
(在
onchange
方法中除外)

我试图在约束中获取它的值,在
import\u-zip
方法中。。。但它返回
False
。但是,当我在XML视图中显示字段
filename
时,我可以在界面中看到文件名,它是正确的并且自动填充的

我有一个丑陋的解决方法,使用计算字段来处理文件名,但我想改进这个方法,并知道这里发生了什么


有什么想法吗?谢谢大家!

该问题与瞬态模型、二进制字段或任何这些无关

字段
filename
是只读的,我刚刚意识到只读字段与
onchange
方法的结合发生了什么,在我看来,Odoo中有一个很大的错误,仍然没有修复-至少在版本9中是这样的:

如果在
onchange
事件中修改只读字段,则可以正常工作 在保存记录之前使用其新值。当这种情况发生时 新值转换为旧值,每个使用它的方法都会 获取旧值

在我的例子中,我在
onchange
方法中看到了
filename
OK,因为记录没有保存,但当我单击执行
import\u zip
方法的按钮时,在执行其内容之前,记录被存储,并且由于Odoo错误,
filename
值被其旧值替换(它总是
False

因此,基本上,解决方案不是只读取字段
fieldname

filename = fields.Char(
    string='Filename',
    readonly=False,
    required=True,
)
在XML中,使其不可见以避免不一致:

<field name="filename" invisible="1"/>

<field name="filename" invisible="1"/>