如何在odoo中为一个2many字段编写域filter onchange函数?

2024-06-07 18:01:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的例子中,我编写了def onchange_insp(self,cr,uid,ids,folionum,context=None)函数,但是在feedback.tree'中的inspec_type不正常工作。

    from openerp.osv import fields, osv
    from openerp import api
    import logging

    class feedback_form(osv.Model):
        _name = 'feedback.form'

        _columns = {
            'company_id111': fields.many2one('res.company', 'Substation', required=True),

            'folionum' : fields.many2one('calendar.event','Maintenance ID',),
            'folio_number' : fields.many2one('asset.asset','Folio number',),
            # this field is filtering properly
            'inspec_type' : fields.many2one('asset1.inspection','Inspection Type',),

            'frequency' : fields.char('Frequency'),
            'shutdown' : fields.char('Shut Down'),
            #'insp_msr1' : fields.many2one('results.measure','Result',),

            'insp_rslt' : fields.one2many('feedback.tree','insp_rsltts','Inspection Result',),

        }


        def onchange_insp(self, cr, uid, ids, folionum,context=None):
            dids = []
            res = {}
            for record in self.pool.get('calendar.event').browse(cr, uid, folionum, context=context):
                dids = [x.id for x in record.inspection_name]
            dids1 = []
            for record in self.pool.get('calendar.event').browse(cr, uid, folionum, context=context):
                dids1 = [x.id for x in record.folio_num1]
            res.update({'inspec_type':[('id','in',dids)]})

            res.update({'folio_number':[('id','in',dids1)]})

            return {'domain':res}


    feedback_form()

    class feedback_tree(osv.Model):
        _name = 'feedback.tree'


        _columns = {
            **# How to do this for this field please reply me soon**
            'inspec_type' : fields.many2one('asset1.inspection','Inspection Type',),
            'valuess' : fields.char('Values/Results'),
            'insp_rsltts': fields.many2one('feedback.form','Result Id'),
            'insp_msr1' : fields.many2one('results.measure','Result',),
        }



        def onchange_measure(self, cr, uid, ids, inspec_type, context=None):
            dids = []
            for record in self.pool.get('asset1.inspection').browse(cr, uid, inspec_type, context=context):
                dids = [x.id for x in record.msr_insp]
            return {'domain':{'insp_msr1':[('id','in',dids)]}}

    feedback_tree()

Tags: inselfidfieldsforuidtypecontext
2条回答

你可以试试this link

示例

'insp_rslt' : fields.one2many('feedback.tree','insp_rsltts','Inspection Result', domain=[('valuess', '=', 'as u like string')])

带odoo 10.0版

Solution applicable to one2many and many2many too :)

课程合作伙伴(models.Model): _inherit=“合伙人”

sb_sector_id = fields.Many2one('sb.business_sector',string="Business Sector" )
sb_categories_id = fields.Many2many('sb.business_categories','rel_sb_business_cates','confirm_id','status_id', string='Business Categories', required=False)

sb_activity_id = fields.Many2many('sb.business_activties','rel_sb_business_activties','confirm_id','status_id', string='Neclamenture of activities', required=False)


@api.onchange('sb_sector_id')
def onchange_sb_sector_id(self):
    return {'domain':{'sb_categories_id':[('sector_id','=',self.sb_sector_id.id if self.sb_sector_id else False)]}}

作为回报,你必须用field编写domain并给出domain值。

return {'domain':{'sb_categories_id':[('sector_id','=',self.sb_sector_id.id if self.sb_sector_id else False)]}}

相关问题 更多 >

    热门问题