ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – odoo中many2one字段的域名过滤器?

2019-10-08 22:07:28  阅读:180  来源: 互联网

标签:odoo python


下面的代码是资产继承类.在这里我将添加’place’字段与’Karn / Bang / Kengeri’和’karn / bang / malleshwaram’为’Karn / Bang / Kengeri’将’asset_catg_id’添加到A和B.然后为’karn / bang / malleshwaram ‘与Y和Z.

现在在calander继承了类.如果我用’Karn / Bang / Kengeri’选择’place’,那么下一个字段’asset_catg_id’我必须只获得A和B下拉列表.如果再次’karn / bang / malleshwaram’那么我必须得到Y,Z选项.以前选择的’asset_catg_id’值应该被删除.我尝试过域过滤器选项得到keyvalue错误

class asset_asset(osv.osv):
    _inherit = "asset.asset"
    #_name = "asset_asset"
    _rec_name= "folio_num"
    _columns = {
        'name': fields.char('Asset Name', size=64),
        'place': fields.many2one('asset.parentlocation', 'Location'),
        'asset_catg_id' : fields.many2one('asset.catg', 'Asset Catg Selection', select=True, required=True),}

class asset_catg(osv.Model): 
    _name="asset.catg" 
    _rec_name='name1'
    _description="Define Asset Catgs" 
    _columns={ 'name1':fields.char('Asset Catg Names',size=64,required=True),}
asset_catg()
class asset_parentlocation(osv.osv):
    _name="asset.parentlocation"
    _rec_name="location_name"
    _columns = {
        'location_name' : fields.char('Asset Location', required=True),
        'parent_location' : fields.many2one('asset.parentlocation','Parent Location'),
        'nameee':fields.many2one('ir.attachment','Attachments'),}

    def name_get(self, cr, uid, ids, context=None):
        if context is None:
            context = {}
        if not ids:
            return []
        reads = self.read(cr, uid, ids, ['location_name','parent_location'], context=context)
        res = []
        for record in reads:
            name = record['location_name']
            if record['parent_location']:
                name = record['parent_location'][1]+' / '+name
            res.append((record['id'], name))
        return res



**Following code is calendar inherited class** 


class calendar_event(osv.osv):

    _inherit = "calendar.event"
    _rec_name = 'number'

    _columns = {
            'number' : fields.char('Meeting ID',readonly=1),
            #'place' : fields.many2one('stock.location','Substation Location',),

            'place' : fields.many2one('asset.parentlocation','Substation Location',),
            #'location' : fields.selection(STATUS_SELECTION,'Location',  default='Board A'),
            'asset_catg_id' : fields.many2one('asset.catg','Asset Catg Selection', domain="[('asset_catg_id', '=',place)]"),}

解决方法:

首先,您的域名在原则上是错误的.域是字段的“内部”,换句话说是在其模型中(例如,在asset.catg模型中的字段名称或id).所以你应该先解决这个问题.

如果domain依赖于另一个字段,则可以使用onchange方法返回域(使用的占位符place_id).像这样:

@api.onchange('place')
def onchange_place(self):
    res = {}
    if self.place:
        res['domain'] = {'asset_catg_id': [('place_id', '=', self.place.id)]}
    return res

附:这是新的v8 api的例子,但同样的原则适用于旧的api(你不需要使用装饰器,也可以在方法上添加cr,uid,id并通过你的视图调用它.所有这些都不需要新的api ).因为看起来你还在开发旧的api.

更新
对于旧api:

def onchange_place(self,cr, uid, ids, place, context=None):
    res = {}
    if self.place: #on old api it will return id, instead of record
        res['domain'] = {'asset_catg_id': [('place_id', '=', self.place)]}
    return res

然后在您的视图中(不知道您使用的是哪种视图):

<field name="place" on_change="onchange_place(place)"/>

您仍然需要在asset.catg中定义一些字段,以便它用于匹配场所字段.例如:

'place_id': fields.many2one('asset.parentlocation', 'Place')

然后,当您定义资产类别时,您可以设置它应该属于哪个位置.然后当你选择放置calendar.event时,onchange方法将正确地在asset_catg_id字段上设置域.

标签:odoo,python
来源: https://codeday.me/bug/20191008/1874761.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有