Как отправить значение по умолчанию для поля из представления в другое представление

Мне нужно создать отношение one2one в openerp7. Я прочитал много статей об этой идее и смог набрать следующий код

проблема в том, что openerp7 не отправляет значение из родительского представления (расчет) в дочерний (контейнер)

это мой код

testproject.py:

from osv import fields,osv

class container(osv.osv):
    _name='container'
    _columns={
        'calculation_id': fields.many2one('calculation','Calculation'),
        'name': fields.char('Name', size=32),
        }
container()

class calculation(osv.osv):
    _name='calculation'
    _columns={
        'container_id': fields.many2one('container','Container'),
        'namefull': fields.char('Name Full', size=32),
        }
calculation()

xml code:

<?xml version="1.0"?>
<openerp>
<data>

    <record model="ir.ui.view" id="view_container_form">
        <field name="name">container.form</field>
        <field name="model">container</field>
        <field name="type">form</field>
        <field name="arch" type="xml">
            <form string="Container">
                <field name="name" select="1"/>
                <field name="calculation_id" context="{'default_container_id': active_id}"  />
            </form>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_container">
        <field name="name">Container</field>
        <field name="res_model">container</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <menuitem name="Container/Container" id="menu_container"/>-->

    <menuitem name="Container" id="menu_container_item" parent="menu_container" action="action_container"/>

    <record model="ir.ui.view" id="view_calculation_form">
        <field name="name">calculation.form</field>
        <field name="model">calculation</field>
        <field name="type">form</field>
        <field name="arch" type="xml">
            <form string="Calculation">
                <field name="namefull" />
                <field name="container_id" />
            </form>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_calculation">
        <field name="name">Calculation</field>
        <field name="res_model">calculation</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <menuitem name="Calculation" id="menu_calculation_item" parent="menu_container" action="action_calculation"/>

</data>
</openerp>

person moha    schedule 21.08.2014    source источник


Ответы (1)


Вы правы, OpenERP не будет перемещать данные за вас — для этого вам потребуется изменить код Python.

О, и вы также должны назвать свои таблицы своим model -- я буду использовать фальшивое имя модели my_model:

class calculation(osv.Model):
    _name = 'my_model.calculation'
    _columns = {
        'container_id' fields.many2one('my_model.container', 'Container'),
        'namefull': fields.char('Name Full', size=32),
        }

    def create(self, cr, uid, values, context=None):
        new_id = super(calculation, self).create(cr, uid, values, context=context)
        self.pool.get('my_model.container').create(cr, uid, {'calculation_id':new_id, 'name':values['namefull'])
        return new_id

И что-то похожее на write() в случае обновления namefull.

person Ethan Furman    schedule 22.08.2014
comment
спасибо Итан, но в файле res_partner_view. xml вы можете увидеть код: ‹page string=Contacts attrs={'invisible': [('is_company','=',False), ('child_ids', '=', [])]} autofocus=autofocus› ‹ field name=child_ids mode=kanban context={'default_parent_id': active_id, 'default_street': улица, 'default_street2': улица2, 'default_city': город, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': поставщик, 'default_customer': клиент}› без необходимости использования функции типа create() write() - person moha; 26.08.2014