Show/Hide 个字段(如果列表中没有)

Show/Hide fields if there is not in list

我的想法是我在 Odoo 上有 5 个不同的访问级别。

我想检查登录用户是否在列表中(列表由自动操作创建),如果是,则显示字段,否则隐藏它们。

我的代码:

list_of_users= []
if record.user_id.partner_id.id: #level 1 user add on list
  list_of_users.append(record.user_id.partner_id.id)

if record.user_id.sale_team_id.user_id.partner_id.id: #level 2 user add on list
  list_of_users.append(record.user_id.sale_team_id.user_id.partner_id.id)

if record.user_id.sale_team_id.regional_manager_id.partner_id.id: #level 3 user add on list
  list_of_users.append(record.user_id.sale_team_id.regional_manager_id.partner_id.id)

user_ids = record.env['res.users'].search([])
flag = record.env['res.users'].search([('groups_id','ilike','L4')])

for user_ids in flag: #level 4 and 5 users add on list
  user_record = record.env['res.users'].browse(user_ids)
  list_of_users.append(user_ids.partner_id.id)

record.update({'x_partner_follower_custom': [(6, 0, list_of_users)]})

在视图中,我在我想要 show/hide

的字段中使用 attrs="{'invisible': [('x_partner_follower_custom', '=', False)]}"

x_partner_follower_custom: many2many res.partner 字段

输出样本:

如您所见,我 return 用户返回查看,但似乎 attrs 设置不正确。知道如何解决吗?

首先,该字段不应该是 stored 并且每次都必须计算它,因为它 depends 基于当前记录的值 user,删除 store:

   @api.depends('x_partner_follower_custom')
   def user_exist(self):
        for rec in self:
             if rec.x_partner_follower_custom and self.env.user.partner_id.id in rec.x_partner_follower_custom.ids:
                 rec.your_boolean_field_name = True
             else:
                 rec.your_boolean_field_name = False 

所以该字段取决于 x_partner_follower_custom 和当前登录的用户,它不应该是 stored

编辑

一切都在表单视图中进行了解释,以及如何使代码像在代码中创建的那样工作:

我设法找到解决方案,几天前:@Fotic

for record in self:
  if record['x_partner_follower_custom'] and self.env.user.partner_id.id in record['x_partner_follower_custom'].ids:
    record['x_partner_is_follower_custom'] = True
  else:
    record['x_partner_is_follower_custom'] = False