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"/>