diff --git a/cmdb-api/api/lib/cmdb/value.py b/cmdb-api/api/lib/cmdb/value.py
index 4b49dac..8fe4fcf 100644
--- a/cmdb-api/api/lib/cmdb/value.py
+++ b/cmdb-api/api/lib/cmdb/value.py
@@ -237,6 +237,9 @@ class AttributeValueManager(object):
                 if attr.is_list:
                     if isinstance(value, dict):
                         if value.get('op') == "delete":
+                            value['v'] = [ValueTypeMap.serialize[attr.value_type](
+                                self._deserialize_value(attr.alias, attr.value_type, i))
+                                          for i in handle_arg_list(value['v'])]
                             continue
                         _value = value.get('v') or []
                     else:
@@ -295,9 +298,9 @@ class AttributeValueManager(object):
                                     has_dynamic = True
 
                     elif value.get('op') == "delete":
-                        for idx, v in enumerate((value.get('v') or [])):
+                        for v in (value.get('v') or []):
                             if v in existed_values:
-                                existed_values[idx].delete(flush=False, commit=False)
+                                existed_attrs[existed_values.index(v)].delete(flush=False, commit=False)
                                 if not attr.is_dynamic:
                                     changed.append((ci.id, attr.id, OperateType.DELETE, v, None, ci.type_id))
                                 else: