Должен ли я записывать имя пользователя, который изменяет определенное поле с помощью Odoo?

.py-файл: ….

namex=поля.Текст()

moifier=fields.Many2one(‘res.users’, строка=”Модификатор”)

Когда какой-либо пользователь изменяет «namex», его/ее имя должно автоматически записываться в поле «modifier»; какой код мне сделать? Я пробовал «onchange/depends», но не смог; может быть, модификатор может быть «текстовым полем/символьным полем»?

кроме того, должен ли я установить «access_rule», чтобы пользователи могли просто видеть записи, созданные членами его/ее собственной группы?


person vx2008    schedule 21.07.2016    source источник


Ответы (2)


У Odoo уже есть это для вас. Каждая модель имеет эти поля, которые автоматически создаются и обновляются каждый раз, когда вы создаете или пишете:

  • create_date (datetime): когда создается запись
  • create_uid (many2one): пользователь, создавший эту запись
  • write_date (datetime): время последнего обновления записи
  • write_uid (many2one): последний пользователь обновил эту запись

Перейдите в «Настройки» > «Технические» > «Структура базы данных» > «Модели» для получения более подробной информации.

person Hung Hoang    schedule 22.07.2016
comment
Спасибо за информацию; Я многому научился из этого ответа. - person vx2008; 24.07.2016

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

Одна из возможностей сделать это для конкретной модели — переопределить метод write этой модели. В вашем файле .py вы можете добавить что-то вроде этого:

@api.model
def write(self):
    if self.namex in values:
        values.update({'modifier': uid})
    super().write(cr, uid, ids, values, context)

Другой способ сделать это более гибким — использовать декоратор @onchange:

@onchange('your_sensible_field_name'):
def set_modifier(self):
    self.modifer = self.env.user

Вы также можете взглянуть на декоратор @depends.

person Andrei Boyanov    schedule 22.07.2016