如何在Odoo的表单视图中获取当前用户id(uid)?
How to get the current user id (uid) in the form view of Odoo?
我想在表单视图的button的attrs属性中添加一个过滤当前用户id的域,如下:
<button name="my_name" attrs="{'invisible': [('my_field', '!=', uid)]}" />
Uid 未定义是错误。我尝试使用 user.id、user_id.,这也给出了同样的错误。请帮助我
在视图模型中,有一个 python eval 正在为 attrs 属性执行,这就是我们收到此错误的原因。为了克服这个问题,我们必须覆盖名为“transfer_node_to_modifiers”的函数。代码如下:
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
下载
uid 仅在域内使用,不在 attrs 内使用。
解决方法如下:
- 创建群组
- 将用户分配到组
- 将组分配给按钮。
<button name="btn_name" type="object" string="string" groups="module.group_name"/>
试试这个方法
- 在 ResUsers 中创建一个布尔字段。
- 在表单的 class 中创建一个布尔类型的计算字段。
如果 ResUsers 中的布尔字段为真,则将计算字段标记为真。
如果 self.env['res.users'].browse(self.env.uid).show_button:
self.computefield = 正确
- 在按钮的属性中使用计算字段
我想在表单视图的button的attrs属性中添加一个过滤当前用户id的域,如下:
<button name="my_name" attrs="{'invisible': [('my_field', '!=', uid)]}" />
Uid 未定义是错误。我尝试使用 user.id、user_id.,这也给出了同样的错误。请帮助我
在视图模型中,有一个 python eval 正在为 attrs 属性执行,这就是我们收到此错误的原因。为了克服这个问题,我们必须覆盖名为“transfer_node_to_modifiers”的函数。代码如下:
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
下载uid 仅在域内使用,不在 attrs 内使用。
解决方法如下:
- 创建群组
- 将用户分配到组
- 将组分配给按钮。
<button name="btn_name" type="object" string="string" groups="module.group_name"/>
试试这个方法
- 在 ResUsers 中创建一个布尔字段。
- 在表单的 class 中创建一个布尔类型的计算字段。
如果 ResUsers 中的布尔字段为真,则将计算字段标记为真。
如果 self.env['res.users'].browse(self.env.uid).show_button:
self.computefield = 正确 - 在按钮的属性中使用计算字段