Odoo получить идентификатор выбранного пользователя в поле One2Many

1

Привет, ребята, я новичок в Odoo, сейчас у меня есть 2 модели, как показано ниже:

class HumanResource(models.Model):
# _name = 'hr.employee'
_inherit = 'hr.employee'

food_ids = fields.One2many(
    'hr.employee.food',
    'food_id',
    string='Food Cost'
)


class HrFood(models.Model):
_name = "hr.employee.food"
_description = "Food"

food_id = fields.Many2one('hr.employee', string='Food', default=lambda self: self.env['hr.employee'].id)
# food_id = fields.Many2one('hr.employee', 'Food')
# foodtype = ?to?
food_name = fields.Char(
    string='Food Name',
    help='Please Enter the Food Name'
)

food_category = fields.Selection(
    [('breakfast', 'Breakfast'),
     ('lunch', 'Lunch'),
     ('teatime', 'Tea Time'),
     ('dinner', 'Dinner'),
     ('supper', 'Supper')],
    string='Category',
)
food_cost = fields.Float(
    string='Food Amount',
    digits=(5, 2)
)

Я наследую существующую модель hr.employee, которую я установил в "Приложениях".

Ниже представлен вид наследования. введите описание изображения здесь

Тогда то, что я хочу, - это когда я нажимаю "Добавить элемент", он автоматически заполняет идентификатор сотрудника, который я выбрал в поле food_id (Many2one) в классе HrFood.

Это текущий результат, и поле, в котором я кругом, - это поле, в котором я хочу установить значение по умолчанию в качестве выбранного сотрудника. введите описание изображения здесь

Пожалуйста, помогите мне решить мой вопрос, я новичок в Odoo. И моя версия Odoo - это Odoo 11, спасибо заранее.

Теги:
odoo
odoo-11

2 ответа

1
Лучший ответ

Вам не нужно заполнять поле food_id потому что Odoo будет обрабатывать это для вас. Просто сделайте это поле невидимым, чтобы пользователь не потрудился его заполнить.

Некоторые советы:

  1. Переименуйте food_id в employee_id, потому что позади этого атрибута есть сотрудник.
  2. Определите редактируемое древовидное представление в представлении формы сотрудника для ваших записей продуктов. Для этих трех столбцов вид формы для записей пищи слишком велик.
  • 0
    Я бы взял советы, которые работают для меня, большое спасибо
1

Вы можете добавить метод default_get в класс HrFood, чтобы получить текущий идентификатор сотрудника, который выбран.

В поле XML добавьте следующую строку:

<field name='food_ids'  context="{'default_active_id': active_id}"></field>

то в Python добавьте функцию в класс HrFood

 @api.model
 def default_get(self, fields):
     res = super(HrFood, self).default_get(fields)
     if self.env.context.get('default_active_id'):
        food_id = self.env.context.get('default_active_id')
     return res.update({'food_id': food_id})
  • 0
    Привет sfx, спасибо за ваш ответ. Должен ли я добавить метод в класс HrFood или класс HumanResource? Я изменил его в @ api.model def default_get (self, fields): res = super (HrFood, self) .default_get (fields), если self.env.context.get ('id'): food_id = self.env .context.get ('id') return res.update ({'food_id': food_id}) Поскольку я хочу получить идентификатор сотрудника, я попытался добавить его к ним обоим, а также к одному из них для обоих классов. Но никто из них не вернул ожидаемого результата. Спасибо тебе за твое терпение
  • 0
    По сути, я меняю 'active_id' на 'id', извините за первый комментарий в StackOverflow.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню