diff --git a/model/model_meta.go b/model/model_meta.go index 751965f5..860b9602 100644 --- a/model/model_meta.go +++ b/model/model_meta.go @@ -47,7 +47,21 @@ func (mi *Model) Insert() error { now := common.GetTimestamp() mi.CreatedTime = now mi.UpdatedTime = now - return DB.Create(mi).Error + + // 保存原始值(因为 Create 后可能被 GORM 的 default 标签覆盖为 1) + originalStatus := mi.Status + originalSyncOfficial := mi.SyncOfficial + + // 先创建记录(GORM 会对零值字段应用默认值) + if err := DB.Create(mi).Error; err != nil { + return err + } + + // 使用保存的原始值进行更新,确保零值能正确保存 + return DB.Model(&Model{}).Where("id = ?", mi.Id).Updates(map[string]interface{}{ + "status": originalStatus, + "sync_official": originalSyncOfficial, + }).Error } func IsModelNameDuplicated(id int, name string) (bool, error) { @@ -61,18 +75,10 @@ func IsModelNameDuplicated(id int, name string) (bool, error) { func (mi *Model) Update() error { mi.UpdatedTime = common.GetTimestamp() - return DB.Model(&Model{}).Where("id = ?", mi.Id).Updates(map[string]interface{}{ - "model_name": mi.ModelName, - "description": mi.Description, - "icon": mi.Icon, - "tags": mi.Tags, - "vendor_id": mi.VendorID, - "endpoints": mi.Endpoints, - "status": mi.Status, - "sync_official": mi.SyncOfficial, - "name_rule": mi.NameRule, - "updated_time": mi.UpdatedTime, - }).Error + // 使用 Select 强制更新所有字段,包括零值 + return DB.Model(&Model{}).Where("id = ?", mi.Id). + Select("model_name", "description", "icon", "tags", "vendor_id", "endpoints", "status", "sync_official", "name_rule", "updated_time"). + Updates(mi).Error } func (mi *Model) Delete() error {