我需要创建many2one字段。但它应该根据我的函数逻辑过滤数据。那么如何在OpenERP ver 7中实现它?
我尝试使用下面的代码。但它没有给出list.just加载为只读字段:
def _get_users(self, cr, uid, ids, field_name, arg, context=None):
res = {}
users_list=[]
officer_ids = self.search(cr, uid , 'bpl.officer', [('is_user', '=', True)])
officer_obj = self.browse(cr, uid, officer_ids, context=context)
for record in officer_obj:
users_list.append(record.user_id.id)
user_obj = self.pool.get('res.users')
for data in self.browse(cr, uid, ids, context=context):
res[data.id] = users_list
return res
_name = "bpl.officer"
_description = "Officer registration details"
_columns = {
'bpl_company_id':fields.many2one('res.company', 'Company', help='Company'),
'bpl_estate_id':fields.many2one('bpl.estate.n.registration', 'Estate', help='Estate', domain="[('company_id', '=', bpl_company_id)]"),
'bpl_division_id':fields.many2one('bpl.division.n.registration', 'Division', help='Division', domain="[('estate_id','=',bpl_estate_id)]"),
'name': fields.char('Name', size=128, required=True),
'is_user': fields.boolean('Is User', help="Is System user or not"),
'user_id': fields.function(_get_users, type="many2one",relation="res.users"),
答案 0 :(得分:5)
首先,你创建的函数字段是错误的.user_id本身是一个功能字段,你在其中使用了一些魔法(我不明白)。请将其更改为many2one字段。
如果要过滤掉某些记录,可以在添加user_id字段的xml文件中添加域过滤器。
例如<field name="user_id" domain="[('is_user', '=', True)]"/>
如果is_user是res_partner表中的一个字段,那么你可以覆盖fields_view_get
函数,并从那里添加指定域。
答案 1 :(得分:1)
首先,使用res.users将user_id设为many2one字段。
您可以在res.users对象的上下文的基础上添加上下文和覆盖搜索方法,并根据您的逻辑返回记录。
由于无法添加直接域,我认为您需要在上下文中覆盖res.users的搜索方法,如下所示:
def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
if context is None:
context = {}
users_list = []
if context.get('test') == 'test':
officer_ids = OFFICE_OBJ.search(cr, uid , [('is_user', '=', True)])
officer_obj = OFFICE_OBJ.browse(cr, uid, officer_ids, context=context)
for record in officer_obj:
users_list.append(record.user_id.id)
return users_list
return super(res_users, self).search(cr, uid, args, offset, limit,
order, context=context, count=count)