如何在 odoo 中使用过滤器搜索更改选择字段? [奥多9]
How to change selection fields with filters search in odoo? [Odoo 9]
我已经在模型上创建了状态
state = fields.Selection([
('new', 'New'),
('draft', 'Draft'),
('approved', 'Approved')
],default='new')
我为用户和管理员制作了不同的菜单项。但是在管理组中,添加过滤器搜索后出现错误。
<record id="view_admin_filter" model="ir.ui.view">
<field name="name">Admin</field>
<field name="model">mymodels</field>
<field name="arch" type="xml">
<search string="Admin">
<filter string="Draft" name="state" domain="[('state','=','draft')]"/>
</search>
</field>
</record>
和
<record id="open_module_tree_admin" model="ir.actions.act_window">
<field name="name">Admin</field>
<field name="res_model">mymodels</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{
"search_default_state": 1,
"default_state": 1}
</field>
<field name="domain">[]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('view_admin_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('view_admin_form')})]"/>
<field name="search_view_id" ref="view_admin_filter"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create.
</p>
</field>
</record>
我发现了这样的错误
ValueError: Wrong value for mail.mail.state: 1
我试过这样替换
"search_default_state": 'draft',
"default_state": 'draft'}
但它仍然无法正常工作并出现错误
ValueError: Wrong value for mail.mail.state: u'draft'
我该如何解决?
根据您的说法,您正在为代码中的某个位置设置默认值
具有不在选择中的值。
例如,当您这样做时:
"default_state": 1
这将导致此错误发生,因为我确定 1
不是有效值
相反,这样做是正确的。
"default_state": 'draft'
但前提是您的选择具有此值 'draft'。
在 XML
从操作中删除上下文代码中你应该知道的一件事
定义不会将其从数据库中删除(您将继续遇到同样的问题)。
要解决此问题,请从您的代码中删除此默认值,然后再逐步执行
并确保升级模块并重新启动服务器。
<record id="open_module_tree_admin" model="ir.actions.act_window">
<field name="name">Admin</field>
<field name="res_model">mymodels</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field> <!-- this will update the context to {} -->
.....
....
并检查您的 python 代码的默认值或 onchange 事件,确保您没有设置
状态字段设置为错误值。
fields.Selection(.... default='draft')
希望对你有帮助
并且对于您的过滤器,不要给它们命名,例如您的字段名称
<filter string="Draft" name="draft_state" domain="[('state','=','draft')]"/>
这样您就可以像这样在操作的上下文中应用此过滤器:*
{'search_default_draft_state': 1}
我觉得这样比较安全
我已经在模型上创建了状态
state = fields.Selection([
('new', 'New'),
('draft', 'Draft'),
('approved', 'Approved')
],default='new')
我为用户和管理员制作了不同的菜单项。但是在管理组中,添加过滤器搜索后出现错误。
<record id="view_admin_filter" model="ir.ui.view">
<field name="name">Admin</field>
<field name="model">mymodels</field>
<field name="arch" type="xml">
<search string="Admin">
<filter string="Draft" name="state" domain="[('state','=','draft')]"/>
</search>
</field>
</record>
和
<record id="open_module_tree_admin" model="ir.actions.act_window">
<field name="name">Admin</field>
<field name="res_model">mymodels</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{
"search_default_state": 1,
"default_state": 1}
</field>
<field name="domain">[]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('view_admin_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('view_admin_form')})]"/>
<field name="search_view_id" ref="view_admin_filter"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create.
</p>
</field>
</record>
我发现了这样的错误
ValueError: Wrong value for mail.mail.state: 1
我试过这样替换
"search_default_state": 'draft',
"default_state": 'draft'}
但它仍然无法正常工作并出现错误
ValueError: Wrong value for mail.mail.state: u'draft'
我该如何解决?
根据您的说法,您正在为代码中的某个位置设置默认值 具有不在选择中的值。
例如,当您这样做时:
"default_state": 1
这将导致此错误发生,因为我确定 1
不是有效值
相反,这样做是正确的。
"default_state": 'draft'
但前提是您的选择具有此值 'draft'。
在 XML
从操作中删除上下文代码中你应该知道的一件事
定义不会将其从数据库中删除(您将继续遇到同样的问题)。
要解决此问题,请从您的代码中删除此默认值,然后再逐步执行 并确保升级模块并重新启动服务器。
<record id="open_module_tree_admin" model="ir.actions.act_window">
<field name="name">Admin</field>
<field name="res_model">mymodels</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field> <!-- this will update the context to {} -->
.....
....
并检查您的 python 代码的默认值或 onchange 事件,确保您没有设置 状态字段设置为错误值。
fields.Selection(.... default='draft')
希望对你有帮助
并且对于您的过滤器,不要给它们命名,例如您的字段名称
<filter string="Draft" name="draft_state" domain="[('state','=','draft')]"/>
这样您就可以像这样在操作的上下文中应用此过滤器:*
{'search_default_draft_state': 1}
我觉得这样比较安全