Как да изпратите стойност по подразбиране за поле от изглед към друг изглед

Трябва да създам релация 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› ‹ име на полето=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