открыть непосредственно представление формы one2many с помощью кнопки «Создать» (odoo)

У меня простой код.

питон:

class Test(osv.osv):
    _name= 'test.name'
    _columns= {
        'name' = fields.char('Name')
}

XML:

<record model="ir.ui.view" id="test_form_view">
    <field name="name">Test</field>
    <field name="model">test.name</field>
    <field name="type">form</field>
    <field name="arch" type="xml">
        <form version="7.0">
            <sheet>
                <group>
                    <field name="name"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

Я хотел бы открыть представление формы так же, как после нажатия поля one2many (с кнопками save&close, save&new, discard), чтобы я мог нажать кнопку «Сохранить и создать» и напрямую добавить новую запись, не закрывая и не открывая новую форму.

Есть ли шанс сделать это? (без ручного создания формы с пользовательскими кнопками)


person Irakli Mchedlishvili    schedule 30.05.2016    source источник
comment
Насколько я знаю, для этого нет встроенного мастера/всплывающего окна. Но вы можете использовать редактируемые древовидные представления, если в вашей модели не так много полей. Просто не по теме: почему вы используете OpenERP/Odoo V7 вместо одного из более новых?   -  person CZoellner    schedule 30.05.2016
comment
@CZoellner это могло бы помочь заполнить поле имени несколько раз без закрытия и повторного открытия, но это не то, что я ищу (мне нужно представление с кнопками ...). В любом случае спасибо. Отвечая на ваш вопрос: использование OpenERP/Odoo V7 не является моим выбором.   -  person Irakli Mchedlishvili    schedule 31.05.2016


Ответы (1)


К сожалению, вы не можете перезаписать методы ORM, такие как create, чтобы они вызывали другую форму, поэтому я рекомендую вам попробовать следующее:

Создайте новую переходную модель, похожую на вашу модель test.name, следующим образом:

class YourAbstractModel(osv.TransientModel):
    _name= 'your.abstract.model'
    _columns= {
        'name': fields.char('Name')
    }

    def create_test_name(self, cr, uid, ids, context):
        wizard_info = self.browse(cr, uid, ids)[0]
        vals = {
            'name': wizard_info.name or False
        }
        self.pool.get('test.name').create(cr, uid, vals, context=context)
        return {
            'type': 'ir.actions.act_window',
            'res_model': 'your.abstract.model',
            'view_mode': 'form',
            'view_type': 'form',
            'views': [(False, 'form')],
            'target': 'new',
        }

А также создать собственное представление:

<record model="ir.ui.view" id="your_abstract_model_form_view">
    <field name="name">Your abstract model form</field>
    <field name="model">your.abstract.model</field>
    <field name="type">form</field>
    <field name="arch" type="xml">
        <form version="7.0">
            <sheet>
                <group>
                    <field name="name"/>
                </group>
                <footer>
                    <button name="create_test_name" string="Create" type="object" class="oe_highlight"/> or 
                    <button special="cancel" string="Cancel" class="oe_link"/>
                </footer>
            </sheet>
        </form>
    </field>
</record>

Затем измените пункт меню, который показывал представление, которое вы написали в своем вопросе, и заставьте его вызывать новое представление, которое я написал здесь.

Я думаю, вы можете справиться со своей целью, если я хорошо понял вопрос.

person forvas    schedule 30.05.2016
comment
Спасибо за ответ. Этот подход отлично работает, если только вы не нажмете кнопку «Создать» в первый раз? (Вот почему я хотел получить такое представление сразу после нажатия кнопки «Создать»). Кроме того, я сделал что-то очень похожее, просто определив методы, которые возвращают нужные мне представления, но в том же классе и вызывая их с помощью кнопок формы xml . И это работало почти так же, как тот, который вы предлагаете. Итак, в чем реальная польза от создания новой переходной модели, которая затем записывает вещи в мою тестовую модель? - person Irakli Mchedlishvili; 31.05.2016
comment
Я не пробовал, я думаю, вы можете получить тот же результат без создания абстрактной модели, если вы откроете свой мастер, скрывающий кнопки действий ('flags': {'form': {'action_buttons': False, }, }), и создадите свои собственные (которые вызывают метод не-ORM, который вызывает метод ORM ), - person forvas; 31.05.2016