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

时间:2018-11-22 19:16:36

标签: odoo xml-rpc 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'

我应该如何解决?

1 个答案:

答案 0 :(得分:1)

根据您所说的,您正在为代码中的某些位置设置状态的默认值 的值不在选择范围内。

例如,当您执行此操作时:

Exception in thread "main" java.io.FileNotFoundException: /home/plopezmp/C1/3p/Hight_3x3.csv (No such file or directory)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
        at java.io.FileWriter.<init>(FileWriter.java:63)
        at org.nlogo.headless.Main$.path2writer$1(Main.scala:64)
        at org.nlogo.headless.Main$.parseArgs(Main.scala:94)
        at org.nlogo.headless.Main$.main(Main.scala:12)
        at org.nlogo.headless.Main.main(Main.scala)

这将导致发生此错误,因为我确定 "default_state": 1 是无效值 相反,这样做是正确的。

1

但仅当您的选择具有此值“草稿”时。

"default_state": 'draft' 中应了解的一件事是从操作中删除上下文代码 定义不会将其从数据库中删除(您将继续遇到相同的问题)。

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

XML

并检查python代码的默认值或onchange事件,确保未设置 状态字段的值错误。

    <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 {} -->
        .....
        ....

希望这对您有帮助

对于您的过滤器,请勿像字段名一样给它们起名字

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

这样,您可以在以下操作的上下文中应用此过滤器:*

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

我认为这更安全。