Как получить текущего (зарегистрированного) пользователя в XML Odoo V11?

Я работаю над модулем "Каталог сотрудников" в odoo11 и хочу, чтобы страница записной книжки была невидима для текущего пользователя (зарегистрированного пользователя), если он отличается от соответствующего пользователя.

Я пытался использовать user.id в XML, но он не работает.

Вот мой код:

<page name="hr_settings" string="HR Settings" attrs="{'invisible':[('user_id', '!=', user.id)]}">
    <group>
        <group string='Status' name="active_group">
            <field name="company_id"/>
                <field name="user_id" string="Related User"/>
            </group>
        </group>
    </page>

Сообщение об ошибке:

<class 'NameError'>: "name 'user' is not defined" while evaluating

"{'invisible': [('user_id', '!=', user.id)]}"

None" while parsing /opt/odoo/odoo/my_addons/hr_dz/views/employee_views.xml:5, near

<record id="view_employee_form" model="ir.ui.view">

<field name="name">hr.employee.form</field>

Есть идеи об этом, пожалуйста?

2 ответа

Одна вещь, которую я знаю, чтобы использовать поле в атрибутах поля, должна быть упомянута в форме. я не знаю, как получить значение идентификатора пользователя в форме. но если нет такого короткого пути, как uid или user, вы можете обойти это, просто создайте поле m2o, чтобы res.users заставил это поле вычислять поле с store = False.

Пожалуйста, попробуйте это, это полезно для вас.

# by default store = False this means the value of this field
# is always computed.
current_user = fields.Many2one('res.users', compute='_get_current_user')

@api.depends()
def _get_current_user(self):
    for rec in self:
        rec.current_user = self.env.user
    # i think this work too so you don't have to loop
    self.update({'current_user' : self.env.user.id})

и вы можете использовать это поле в вашей форме.

<page name="hr_settings" string="HR Settings" attrs="{'invisible':[('user_id', '=', current_user)]}">
    <group>
        <group string='Status' name="active_group">
            <field name="company_id"/>
            <field name="user_id" string="Related User"/>
        </group>
    </group>
</page>

В основном, в вашем случае мы можем добиться этого с помощью переменной глобального выражения uid на уровне представления.

uid также используется в оценке выражений в файле odoo xml view

<page name="hr_settings" string="HR Settings" attrs="{'invisible':[('user_id', '!=', uid)]}">
    <group>
        <group string='Status' name="active_group">
            <field name="company_id"/>
                <field name="user_id" string="Related User"/>
            </group>
        </group>
    </page>

Нет необходимости добавлять и создавать какие-либо вычислительные поля для кода.

Пожалуйста, смотрите следующий вид под аддонами Odoo V11

аддоны / проект /project_view.xml.

Другие вопросы по тегам