Odoo 8 - Изчислително поле със store=True не може да се съхранява в база данни

Използвам Odoo 8 и имам проблем с compute field с тип Many2One.

Ето, декларирах department_id:

department_id = fields.Text(
    string="Department", store=True,
    comodel_name="hr.department",
    compute="_get_department_id"
)

И функция на това изчислително поле:

@api.depends('employee_id')
def _get_department_id(self):
    if self.employee_id.department_id:
        self.department_id = self.employee_id.department_id.name

Изглежда, че работи в момента, но не е така. В изглед мога да видя стойността на department_id. Но в базата данни таблицата няма колона department_id и няма стойност на тази колона.

Въпросът ми е: как мога да съхраня department_id в база данни?

Бележки:

  • В декларацията на department_id зададох store=True, но то НЕ съхранява стойността на това поле в базата данни.
  • Направих тест. Добавям compute_field с тип Text, работи, не знам защо изчислителното поле не работи с тип Many2One.

    @api.depends('employee_id')
    def _get_compute_field(self):
    if self.employee_id.department_id:
        self.compute_field = self.employee_id.department_id.name
    
    compute_field = fields.Text(
        string="Compute Field", store=True,
        compute="_get_compute_field"
    )
    

person Tuan Tran    schedule 03.03.2015    source източник


Отговори (1)


store=True работи. Възможно е да сте добавили изчислението към полето, след като е било създадено в базата данни. В този случай първоначалното изчисление не се задейства.

Заобиколно решение е да премахнете колоната от таблицата и след това да надстроите вашия модул. Когато полето е пресъздадено, първоначалните стойности трябва да бъдат изчислени.

person Daniel Reis    schedule 04.03.2015