按“保存”按钮后,Many2many字段不存储值
截图:
预期行为: 它应该存储值以便以后使用它
编辑:
型号:
@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)]
答案 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,它会提供正确的数组。
希望这可以帮助其他在我这个悬而未决的问题上绊倒的人。