Как получить текущий идентификатор пользователя (uid) в виде формы Odoo?
Я хочу добавить домен для фильтрации текущего идентификатора пользователя в атрибуте attrs кнопки в представлении формы, которое приведено ниже:
<button name="my_name" attrs="{'invisible': [('my_field', '!=', uid)]}" />
Uid не определен, это ошибка. Я пытался с user.id, user_id., Который также дает ту же ошибку. пожалуйста, помогите мне
3 ответа
Решение
В модели представления есть атрибут python, ожидающий для атрибута 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)]}" />
Я создал патч для этого. Если кому-то нужно, пожалуйста, загрузите отсюда
uid используется только внутри домена, а не внутри attrs.
Вот обходной путь:
- создать группу
- назначить пользователей в группу
- назначить группу кнопке.
<button name="btn_name" type="object" string="string" groups="module.group_name"/>
Попробуй так
- создайте логическое поле в ResUsers.
- создайте поле вычисления логического типа в классе вашей формы.
пометить вычисляемое поле True, если логическое поле в ResUsers равно True.
if self.env ['res.users']. browse (self.env.uid).show_button:
self.computefield = True - использовать поле вычисления в attrs на кнопке