如何在Odoo的表单视图中获取当前用户ID(uid)?

时间:2017-09-24 19:45:26

标签: python openerp odoo-view odoo-domain

我想在表单视图的按钮的attrs属性中添加一个用于过滤当前用户ID的域,如下所示:

<button name="my_name" attrs="{'invisible': [('my_field', '!=', uid)]}" />

Uid未定义是错误。我尝试使用user.id,user_id。,这也给出了同样的错误。请帮帮我

3 个答案:

答案 0 :(得分:1)

在视图模型中,有一个python eval正在为attrs属性执行,这就是我们收到此错误的原因。为了克服这个问题,我们必须覆盖名为&#34; transfer_node_to_modifiers &#34;的函数。代码如下:

def transfer_node_to_modifiers(node, modifiers, context=None, in_tree_view=False):
if node.get('attrs'):
    #If you want, add more conditions here
    if ', uid' in  node.get('attrs'):
        user_id = str(context.get('uid', 1))
        user_id = ', ' + user_id
        attrs = node.get('attrs')
        attrs = attrs.replace(', uid', user_id)
        node.set('attrs', attrs)
    modifiers.update(eval(node.get('attrs')))

if node.get('states'):
    if 'invisible' in modifiers and isinstance(modifiers['invisible'], list):
        # TODO combine with AND or OR, use implicit AND for now.
        modifiers['invisible'].append(('state', 'not in', node.get('states').split(',')))
    else:
        modifiers['invisible'] = [('state', 'not in', node.get('states').split(','))]

for a in ('invisible', 'readonly', 'required'):
    if node.get(a):
        v = bool(eval(node.get(a), {'context': context or {}}))
        if in_tree_view and a == 'invisible':
            # Invisible in a tree view has a specific meaning, make it a
            # new key in the modifiers attribute.
            modifiers['tree_invisible'] = v
        elif v or (a not in modifiers or not isinstance(modifiers[a], list)):
            # Don't set the attribute to False if a dynamic value was
            # provided (i.e. a domain from attrs or states).
            modifiers[a] = v

调用uid与问题

相同
<button name="my_name" attrs="{'invisible': [('my_field', '!=', uid)]}" />

我为此创建了一个补丁。如果有人需要,请从here下载

答案 1 :(得分:1)

uid仅在域内使用,而不是在attrs中使用。

这是一种解决方法:

  1. 创建一个小组
  2. 将用户分配到群组
  3. 将组分配给按钮。
  4. <button name="btn_name" type="object" string="string" groups="module.group_name"/>
    

答案 2 :(得分:1)

试试这种方式

  1. 在ResUsers中创建一个布尔字段。
  2. 在表单的类中创建一个布尔类型的计算字段。
    标记计算字段如果ResUsers中的布尔字段为真,则为真 if self.env ['res.users']。browse(self.env.uid).show_button:
      self.computefield = True
  3. 在按钮上的attrs中使用计算字段