Как изменить поля выбора с фильтрами поиска в odoo?[Одо 9] - PullRequest
0 голосов
/ 22 ноября 2018

Я создал состояние для моделей

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

IЯ пытался заменить его следующим образом

"search_default_state": 'draft',
"default_state": 'draft'}

, но он все еще не работает и выдает ошибку

ValueError: Wrong value for mail.mail.state: u'draft'

как мне это исправить?

1 Ответ

0 голосов
/ 23 ноября 2018

Исходя из того, что вы сказали, вы устанавливаете значение по умолчанию для состояния some в вашем коде со значением, которого нет в выделении.

как, например, когда вы сделали это:

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

Я думаю, что это безопаснее.

...