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

.py файл: ….

НТБ = fields.Text ()

moifier = fields.Many2one ('res.users', string=”Modifier”)

...

Когда какой-либо пользователь изменяет "namex", его / ее имя должно автоматически записываться в поле "модификатор"; какой код я должен сделать? Я пытаюсь "изменить / зависит", но не получилось; Может быть, модификатор может быть "текстовое поле / поле символа"?

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

2 ответа

Решение

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

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

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

Хотя 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.

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