如何在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'

我该怎么修?

根据您所说的,您正在设置代码中state somewhere的默认值具有不在选择范围内的值。

例如,当你这样做时:

"default_state": 1 

这将导致发生此错误,因为我确信1不是有效值相反,这样做是正确的。

"default_state": '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事件,确保您没有设置state字段设置为错误的值。

fields.Selection(.... default='draft')

希望这能帮助你

对于你的过滤器,不要像你的字段名那样给它们起名字

<filter string="Draft" name="draft_state" domain="[('state','=','draft')]"/>

通过这种方式,您可以在如下操作的上下文中应用此筛选器:*

{'search_default_draft_state': 1}

我认为这样更安全。

最新更新