Many2many字段不存储值

时间:2017-09-29 11:15:45

标签: odoo odoo-10

按“保存”按钮后,Many2many字段不存储值

截图:

enter image description here

enter image description here

预期行为: 它应该存储值以便以后使用它

编辑:

型号:

    @api.onchange('Start_Date', 'Cycle_Type', 'Cycle_val')
    def _compute_Stop_Date(self):
        date_range_obj= self.env['working.shift.date.range']
        for record in self:
            days_to_add1=0
            days_to_add=0
            list_date_range_ids = []
            current_date = fields.Datetime.from_string(record.Start_Date)
            day_on=fields.Datetime.from_string(record.Start_Date)
            if record.Cycle_Type == 'day':
                days_to_add=record.Cycle_val           
                while days_to_add > 1:
                    date_range_id= date_range_obj.create({'date':current_date,'day':current_date.strftime('%A')})
                    list_date_range_ids.append(date_range_id.id)
                    current_date += timedelta(days=1) 
                    days_to_add -= 1

            else:
                days_to_add1=record.Cycle_val
                days_to_add=days_to_add1*7           
                while days_to_add > 1:
                    date_range_id= date_range_obj.create({'date':current_date,'day':current_date.strftime('%A')})
                    list_date_range_ids.append(date_range_id.id)
                    current_date += timedelta(days=1) 
                    days_to_add -= 1                

            record.Stop_Date=current_date
            record.Stop_Date_day=current_date.strftime('%A')
            record.Start_Date_day=day_on.strftime('%A')
            date_range_id= date_range_obj.create({'date':current_date,'day':current_date.strftime('%A')})
            list_date_range_ids.append(date_range_id.id)
            record.Date_range = [(6,0,list_date_range_ids)]  

1 个答案:

答案 0 :(得分:0)

请在此处查看:Added users to Many2many field disappear after click save

这似乎是many2many-Widget在视图中的一种奇怪行为,它为值提供了错误的格式。特别是如果该关系已被onchange填充。该列表以[[1,id_1,{}],[1,id_2,{}]]出现,但预期为[[ 4 ,id_1,{}],[ 4 ,id_2,{}]]才能真正创建关系。

OCA有票证:https://github.com/odoo/odoo/issues/21285,但由于Odoo 10.0不在支持范围内,因此不会有真正的解决方法。

在链接的问题中,有一个很好的实现方法可以解决:

def _fix_values(self, values):
    # Die Features kommen leider in der falschen Form an... [[1, <ID>, {}]] ist falsch,
    # dadurch wird nur ein Update der Features getriggert. Notwendig ist ein [[4, <id>, 0]]
    # welches die Relation erzeugt.
    if 'ems_sentinel_feature_ids' in values:
        new_feat_id = []
        for f in values['ems_sentinel_feature_ids']:
            new_f = [4, f[1], 0]
            new_feat_id.append(new_f)
        values['ems_sentinel_feature_ids'] = new_feat_id

    return values

@api.multi
def create(self, vals):
    _logger.info('Creating license.module.product: {0}'.format(vals))
    vals = self._fix_values(vals)
    return super(DswLicenseModuleProduct, self).create(vals)

另一种方法是使用'many2many_tags'-widget,它会提供正确的数组。

希望这可以帮助其他在我这个悬而未决的问题上绊倒的人。