首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在odoo中使用筛选器搜索更改选择字段?[Odoo 9]

如何在odoo中使用筛选器搜索更改选择字段?[Odoo 9]
EN

Stack Overflow用户
提问于 2018-11-22 19:16:36
回答 1查看 1.2K关注 0票数 2

我创造了一个关于模型的状态

代码语言:javascript
复制
state = fields.Selection([
        ('new', 'New'),
        ('draft', 'Draft'),
        ('approved', 'Approved')
        ],default='new')

我制作的菜单项目是不同的用户和管理。但是在管理组中,添加筛选器搜索后会出现一个错误。

代码语言:javascript
复制
<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>

代码语言:javascript
复制
<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>

我发现了这样一个错误

代码语言:javascript
复制
ValueError: Wrong value for mail.mail.state: 1

我试过像这样替换它

代码语言:javascript
复制
"search_default_state": 'draft',
"default_state": 'draft'}

但它还是不起作用,而且出错了

代码语言:javascript
复制
ValueError: Wrong value for mail.mail.state: u'draft'

我该怎么修呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-23 11:03:27

正如您所说的,您正在为状态设置一个默认值,在代码中的某个位置使用一个不在选择中的值。

例如,当你这样做的时候:

代码语言:javascript
复制
   "default_state": 1 

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

代码语言:javascript
复制
  "default_state": 'draft'

但只有当你的选择有这个价值‘草案’。

XML中应该知道的一件事是,从操作定义中删除上下文代码不会将其从数据库中删除(您将始终遇到相同的问题)。

要解决此问题,请从代码中删除此默认值,然后一步一步地执行,并确保升级模块并重新启动服务器。

代码语言:javascript
复制
    <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字段设置为错误的值。

代码语言:javascript
复制
  fields.Selection(.... default='draft')

希望这对你有帮助

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

代码语言:javascript
复制
  <filter string="Draft" name="draft_state" domain="[('state','=','draft')]"/>

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

代码语言:javascript
复制
  {'search_default_draft_state': 1}

我觉得更安全。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53436963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档