контекст не обновляет значение типа - PullRequest
0 голосов
/ 25 мая 2018

У меня есть эти 2 кнопки в виде формы:

<button name="%(action_view_task_make_situation)d" string="Create work situation" type="action" states="open" context="{'type': 'situation'}"/>
<button name="%(action_make_general_final_count)d" string="Create Final General Count" type="action" states="done" context="{'type': 'final_count'}"/> 

с этими действиями:

<record id="action_view_task_make_situation" model="ir.actions.act_window">
    <field name="name">Make Situation</field>
    <field name="res_model">task.make.situation</field>
    <field name="type">ir.actions.act_window</field>
    <field name="view_type">form</field>
    <field name="view_mode">form</field>
    <field name="target">new</field>
    <field name="context">{'type':True}</field>
</record>
<record id="action_make_general_final_count" model="ir.actions.act_window">
    <field name="name">Make General Final Count</field>
    <field name="res_model">task.make.situation</field>
    <field name="type">ir.actions.act_window</field>
    <field name="view_type">form</field>
    <field name="view_mode">form</field>
    <field name="target">new</field>
    <field name="context">{'type':False}</field>
</record>   

теперь у меня есть task.make.situation модель:

class TaskMakeSituation(models.TransientModel):

    _name = "task.make.situation"

    type = fields.Char(compute = "compute_type", string="Type", readonly= True)

    @api.multi
    def compute_type(self):
        if self._context.get('type', True):
            return "situation"
        else:
            return "final_count"

Но когда я нажимаю одну из кнопок, мастер появляется с пустым полем type.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Метод вычисления должен «записать» свои значения непосредственно в записи:

@api.multi
def compute_type(self):
    context_type = self._context.get('type', True)
    for record in self:
        if context_type:
            record.type = "situation"
        else:
            record.type = "final_count"

Помимо этого, ваше решение должно просто использовать значения по умолчанию для поля type.Сначала измените ваше поле на обычное поле символа:

type = fields.Char(string="Type", readonly=True)

Небольшая подсказка: параметр string в этом примере не нужен, потому что более новые версии Odoo будут использовать имя поля для создания меток (строкастановится меткой поля), например: name получит Name или partner_id получит Partner (_id будет удален).

Теперь измените контекст кнопки, используйте default_type:

<button name="%(action_view_task_make_situation)d" 
    string="Create work situation" type="action" states="open" 
    context="{'default_type': 'situation'}"/>
<button name="%(action_make_general_final_count)d"
    string="Create Final General Count" type="action" states="done"
    context="{'default_type': 'final_count'}"/>

Префикс default_ в сочетании с именем поля будет использован при дальнейшем извлечении по умолчанию для создания записи.

0 голосов
/ 25 мая 2018

Просто попробуйте добавить «default_» перед вводом в контексте, например так: context="{'default_type': False}" и использовать только логическое значение, потому что вы проверяете логическое значение в compute_type, сделайте это и в представлениях.

...