Как получить текущий идентификатор пользователя (uid) в представлении формы Odoo?

Я хочу добавить домен для фильтрации текущего идентификатора пользователя в атрибуте attrs кнопки в представлении формы, который приведен ниже:

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

Uid не определен, это ошибка. Пробовал с user.id, user_id., тоже выдает ту же ошибку. Помогите мне, пожалуйста


person manuthalasseril    schedule 24.09.2017    source источник


Ответы (3)


uid используется только внутри домена, а не в attrs.

Вот обходной путь:

  1. создать группу
  2. назначать пользователей в группу
  3. назначить группу на кнопку.
<button name="btn_name" type="object" string="string" groups="module.group_name"/>
person vijay maurya    schedule 25.09.2017
comment
Хорошее решение. Но в моем случае у меня есть требование получить uid в представлении формы. Потому что я хочу скрыть кнопку между пользователями, даже если они принадлежат к одной группе. - person manuthalasseril; 25.09.2017
comment
тогда вы должны создать другую группу для этих пользователей - person Jacky Supit; 16.01.2019

попробуй так

  1. создайте логическое поле в ResUsers.
  2. создайте вычислительное поле логического типа в классе вашей формы.
    отметить поле вычислений как True, если логическое поле в ResUsers равно True.
    if self.env['res.users'].browse(self.env.uid).show_button:
    self.computefield = Истина
  3. использовать поле вычислений в attrs на кнопке
person vijay maurya    schedule 26.09.2017
comment
Спасибо за внимание и время. Я решил это и обновил его в разделе ответов. - person manuthalasseril; 26.09.2017

В модели представления для атрибута attrs выполняется оценка python, поэтому мы получаем эту ошибку. Чтобы преодолеть это, мы должны переопределить функцию с именем "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)]}" />

Я создал патч для этого. Если кому нужно, загрузите с здесь

person manuthalasseril    schedule 25.09.2017