下面的代码是资产继承类.在这里我将添加'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)]"),}
Run Code Online (Sandbox Code Playgroud)
And*_*ius 10
首先,您的域名在原则上是错误的.域名是什么,换言之在其模型(例如场"内部"的字段,name或id在asset.catg模型).所以你应该先解决这个问题.
如果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
Run Code Online (Sandbox Code Playgroud)
PS这是新的v8 api的例子,但同样的原则适用于旧的api(你不需要使用装饰器,也可以添加cr, uid, ids方法并通过你的视图调用它.所有这些都不需要新的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
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中(不知道您使用的是哪种视图):
<field name="place" on_change="onchange_place(place)"/>
Run Code Online (Sandbox Code Playgroud)
仍然需要定义一些字段,asset.catg以便它用于匹配place字段.例如:
'place_id': fields.many2one('asset.parentlocation', 'Place')
Run Code Online (Sandbox Code Playgroud)
然后,当您定义资产类别时,您可以设置它应该属于哪个位置.然后当你选择地点时calendar.event,onchange方法会asset_catg_id正确地在字段上设置域.
| 归档时间: |
|
| 查看次数: |
12946 次 |
| 最近记录: |