微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在onchange事件中加载一个到多个孩子?

我有一个选择领域(多对一分区)
如果我选择一个部门需要在“笔记本部分”加载其“员工”.
如何在openerp 7中实现这一点?

如果我选择相关的房地产ID,则需要加载相关的部门.如果部门选择则需要在后续阶段加载相关的工人

<record model="ir.ui.view" id="bpl_work_offer_form">
<field name="name">bpl.work.offer.form</field>
<field name="model">bpl.work.offer</field>
<field name="arch" type="xml">
<form string='bpl_work_offer' version='7.0'>
<sheet>

<group>
    <group>
        <field name='bpl_estate_id' />
        <field name='bpl_division_id' />
        <field name='user_id' />
    </group>
    <group>
        <field name='date_of_offer' />
        <field name='payment_type' />
        <field name='select_by' />
        <field name='no_of_workers' attrs="{'invisible':[('select_by','=','by_name')]}" />
        <field name='work_type' />

    </group>
</group>
<div name="Worker Selection"></div>
<separator string='Select workers' />
<notebook attrs="{'invisible':[('select_by','by_count')]}">
    <page string="Tea Workers" attrs="{'readonly':[('work_type','!=','tea')]}">
        <field name='selected_tea_workers_line_ids' nolabel='1'>
            <tree string='List' editable='bottom'>
                <field name='worker_id' />
                <field name='is_selected' />
            </tree>
        </field>
        <group class='oe_subtotal_footer oe_right'>
            <field name='total_workers' />
        </group>
        <br />
        <br />
    </page>
    <page string="Rubber Workers" attrs="{'readonly':[('work_type','rubber')]}">
        <field name='selected_rubber_workers_line_ids' nolabel='1'>
            <tree string='List' editable='bottom'>
                <field name='worker_id' />
                <field name='is_selected' />
            </tree>
        </field>
        <group class='oe_subtotal_footer oe_right'>
            <field name='total_workers' />
        </group>
        <br />
        <br />
    </page>
    <page string="Sundry Workers" attrs="{'readonly':[('work_type','sundry')]}">
        <field name='selected_sundry_workers_line_ids' nolabel='1'>
            <tree string='List' editable='bottom'>
                <field name='worker_id' />
                <field name='is_selected' />
            </tree>
        </field>
        <group class='oe_subtotal_footer oe_right'>
            <field name='total_workers' />
        </group>
        <br />
        <br />
    </page>
</notebook>
</sheet>
</form>
</field>
</record>

<record model="ir.actions.act_window" id="bpl_work_offer_action">
<field name="name">bpl.work.offer.action</field>
<field name="res_model">bpl.work.offer</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
</record>

型号代码

class company_new_registration(osv.osv):
    _name = "bpl.company.n.registration"
    _description = "Company"
    _columns = {
                'name': fields.char('Company Name',size=128,required=True),'estates': fields.one2many('bpl.estate.n.registration','company_id','Estate')                                        
    }
# Bill of Material
company_new_registration()

class estate_new_registration(osv.osv):
    _name = "bpl.estate.n.registration"
    _description = "Estates"
    _columns = {
        'name': fields.char('Estate Name','company_id': fields.many2one('bpl.company.n.registration','Company Name',select=True),'divisions': fields.one2many('bpl.division.n.registration','estate_id','Division')
    }

estate_new_registration()

class division_new_registration(osv.osv):
    _name = "bpl.division.n.registration"
    _description = "Divisions"
    _columns = {
        'name': fields.char('Division Name','estate_id': fields.many2one('bpl.estate.n.registration','Estate Name',}

division_new_registration()

并且需要为该工作提供的映射(种植园项目)

class bpl_work_offer(osv.osv):
    _name = "bpl.work.offer"
    _description = "BPL Work Offer"
    _columns = {
        'user_id': fields.many2one('res.users','User Name'),'date_of_offer': fields.date('Date'),'bpl_estate_id':fields.many2one('bpl.estate.n.registration','Estate',help='Estate'),'bpl_division_id':fields.many2one('bpl.division.n.registration','Division',help='Division'),'payment_type': fields.selection([('normal_work','normal Work'),('cash_work','Cash Work')],'Payment Type'),'select_by': fields.selection([('by_name','By Names'),('by_count','By Count')],'Select  By'),'no_of_workers': fields.integer('No of Workers'),'work_type': fields.selection([('tea','Tea'),('rubber','Rubber'),('sundry','Sundry')],'Work Type'),'total_workers': fields.integer('Total Workers'),'selected_tea_workers_line_ids': fields.one2many('bpl.selected.tea.workers.line','worker_id','Tea Workers',ondelete="cascade"),'selected_rubber_workers_line_ids': fields.one2many('bpl.selected.rubber.workers.line','Rubber Workers','selected_sundry_workers_line_ids': fields.one2many('bpl.selected.sundry.workers.line','Sundry Workers',}

bpl_work_offer()

class selected_tea_workers_line_ids(osv.osv):
    _name = 'bpl.selected.tea.workers.line'
    _description = 'BPL Selected Tea Workers line'
    _columns = {
        'worker_id':fields.many2one('bpl.worker','Tea Worker',ondelete='cascade',help='Worker'),'is_selected': fields.boolean('Select',help="Selected or not"),}

selected_tea_workers_line_ids()

class selected_rubber_workers_line_ids(osv.osv):
    _name = 'bpl.selected.rubber.workers.line'
    _description = 'BPL Selected Rubber Workers line'
    _columns = {
        'worker_id':fields.many2one('bpl.worker','Rubber Worker',}

selected_rubber_workers_line_ids()

class selected_sundry_workers_line_ids(osv.osv):
    _name = 'bpl.selected.sundry.workers.line'
    _description = 'BPL Selected Sundry Workers line'
    _columns = {
        'worker_id':fields.many2one('bpl.worker','Sundry Worker',}

selected_sundry_workers_line_ids()

解决方法

您可以使用以下示例来创建onchange函数.这是我为发票创建的onchange功能(仅举例)
def onchange_partner_id(self,cr,uid,ids,type,partner_id,\
        date_invoice=False,payment_term=False,partner_bank_id=False,company_id=False):
    res = super(account_invoice,self).onchange_partner_id(cr,date_invoice=date_invoice,payment_term=payment_term,partner_bank_id=partner_bank_id,company_id=company_id)

    invoice_lines = []
    product_ids = self.pool.get('product.product').search(cr,[],limit=5)
    for p in self.pool.get('product.product').browse(cr,product_ids):
        invoice_lines.append((0,{'product_id':p.id,'name':p.name,'account_id':p.categ_id.property_account_income_categ.id,}))#this dict contain keys which are fields of one2many field 
    res['value']['invoice_line']=invoice_lines
    return res

如果只有一行要添加
RES [ ‘值’].更新({
‘one2many_fieldmname’:[(0,{ ‘field1的’:值1,‘FIELD2’:值2,‘字段N’:值N})]
})

在上面的例子中,我正在搜索5个产品,这些产品被添加到invoiceline中.因此,在您的onchange功能中,您还必须搜索该部门下的员工.

在您的代码中,以“bpl_work_offer_form”的形式在字段bpl_division_id中添加onchange函数.(在我的示例中,partner_id是many2one字段,invoice_line是one2many字段.)

使用onchange加载one2many字段时需要更加小心.在onchange函数中,您必须首先取消链接在many2one字段中加载的所有记录.因为如果保存记录,那么如果再次加载onchange,则会创建一个新行.所以你需要正确管理它.

参考:http://doc.openerp.com/trunk/developers/server/06_misc_on_change_tips/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open