报表
This commit is contained in:
@@ -233,7 +233,7 @@ class AiReportTemplate(models.Model):
|
||||
{f.name: f.field_description for f in self.field_ids},
|
||||
ensure_ascii=False
|
||||
)
|
||||
# 同步 column_ids:去重 + 删不在的 + 补缺失的
|
||||
# 同步 column_ids:去重 + 删不在的 + 补缺失的 + 修复空字段
|
||||
if self.column_ids or self.field_ids:
|
||||
new_field_ids = set(self.field_ids.ids)
|
||||
cmds = []
|
||||
@@ -247,11 +247,17 @@ class AiReportTemplate(models.Model):
|
||||
kept[fid] = col
|
||||
else:
|
||||
cmds.append((2, col.id)) # 重复的删掉
|
||||
# 2) 删掉不在 field_ids 里的
|
||||
# 2) 修复 kept 列中 field_name 为空的列
|
||||
for fid, col in kept.items():
|
||||
if not col.field_name:
|
||||
f = self.field_ids.filtered(lambda r: r.id == fid)
|
||||
fname = f.name if f else col.field_id.name
|
||||
cmds.append((1, col.id, {'field_name': fname}))
|
||||
# 3) 删掉不在 field_ids 里的
|
||||
for fid, col in kept.items():
|
||||
if fid not in new_field_ids:
|
||||
cmds.append((2, col.id))
|
||||
# 3) 补充 field_ids 里有但 column_ids 里没有的
|
||||
# 4) 补充 field_ids 里有但 column_ids 里没有的
|
||||
seq = max((col.sequence for col in self.column_ids), default=0) + 10
|
||||
for f in self.field_ids:
|
||||
if f.id not in kept:
|
||||
@@ -287,13 +293,14 @@ class AiReportTemplate(models.Model):
|
||||
if vals.get('field_ids'):
|
||||
self._sync_field_list_from_ids(vals)
|
||||
result = super().write(vals)
|
||||
if vals.get('field_ids'):
|
||||
for record in self:
|
||||
# 任何 write 都触发 column 去重 + 同步(清理历史重复数据 + 确保一致性)
|
||||
for record in self:
|
||||
if record.field_ids:
|
||||
record._sync_column_ids_from_field_ids()
|
||||
return result
|
||||
|
||||
def _sync_column_ids_from_field_ids(self):
|
||||
"""根据 field_ids 同步 column_ids:去重 + 删不在的 + 补缺失的"""
|
||||
"""根据 field_ids 同步 column_ids:去重 + 删不在的 + 补缺失的 + 修复空字段"""
|
||||
self.ensure_one()
|
||||
new_field_ids = set(self.field_ids.ids)
|
||||
cmds = []
|
||||
@@ -302,16 +309,22 @@ class AiReportTemplate(models.Model):
|
||||
for col in self.column_ids:
|
||||
fid = col.field_id.id if col.field_id else None
|
||||
if not fid:
|
||||
cmds.append((2, col.id))
|
||||
cmds.append((2, col.id)) # 没有 field_id 的脏数据直接删
|
||||
elif fid not in kept:
|
||||
kept[fid] = col
|
||||
else:
|
||||
cmds.append((2, col.id)) # 重复的删掉
|
||||
# 2) 删掉不在 field_ids 里的
|
||||
# 2) 修复 kept 列中 field_name 为空的列(required=True 约束)
|
||||
for fid, col in kept.items():
|
||||
if not col.field_name:
|
||||
f = self.field_ids.filtered(lambda r: r.id == fid)
|
||||
fname = f.name if f else col.field_id.name
|
||||
cmds.append((1, col.id, {'field_name': fname}))
|
||||
# 3) 删掉不在 field_ids 里的
|
||||
for fid, col in kept.items():
|
||||
if fid not in new_field_ids:
|
||||
cmds.append((2, col.id))
|
||||
# 3) 补充 field_ids 里有但 column_ids 里没有的
|
||||
# 4) 补充 field_ids 里有但 column_ids 里没有的
|
||||
seq = max((col.sequence for col in self.column_ids), default=0) + 10
|
||||
for f in self.field_ids:
|
||||
if f.id not in kept:
|
||||
|
||||
Reference in New Issue
Block a user