gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:55:06 24 4
gpt4 key购买 nike

下面的代码是 Assets 继承类。在这里,我将添加 'place' 字段,其中包含 'Karn/Bang/Kengeri''karn/bang/malleshwaram' 用于 'Karn/Bang/Kengeri' 将添加带有 A 和 B 的 'asset_catg_id'。然后为带有 Y 和 Z 的 'karn/bang/malleshwaram' 添加。

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

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 模型中的字段 nameid) .所以你应该先修复那个。

如果域依赖于另一个字段,可以使用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

P.S. 这是新的 v8 api 的例子,但同样的原则适用于旧的 api(你不需要使用装饰器,也添加 cr, uid, ids 在方法上并通过您的 View 调用它。所有这些对于新的 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

然后在你的 View 中(不知道你用的是什么 View ):

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

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

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

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

关于python - odoo 中 many2one 字段的域过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31112604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com