Index: /branches/rel_apv_10_7_4/usr/click/webui/htdocs/new/src/hive/router.py
===================================================================
--- /branches/rel_apv_10_7_4/usr/click/webui/htdocs/new/src/hive/router.py	(revision 39756)
+++ /branches/rel_apv_10_7_4/usr/click/webui/htdocs/new/src/hive/router.py	(working copy)
@@ -785,11 +785,19 @@
         composition_asso_model_list = []
         for key, value in d.iteritems():
             field = model._meta.get_field(key)
+            if field.is_external_component():
+                setattr(instance, key, None)
+                continue
             if value == 'CONDITIONAL_NONE':
                 setattr(instance, key, CONDITIONAL_NONE)
                 continue
             if value == "" and isinstance(field, IntegerField):
-                value = 0
+                if field.optional:
+                    setattr(instance, key, None)
+                    field_list.append(key)
+                    continue
+                else:
+                    value = 0
             #Because csv data is type str, a dict or a list after csv reading will turn to be type str.
             #For IPAdressFiled, GroupField, UnionFiled, etc. We should try to change it back to type dict or list.
             if field.type_name in ['ipaddr', 'GroupField', 'UnionField', 'multienum', 'ListField', 'enumorder', 'Percent']:
@@ -853,6 +861,13 @@
                                 for_update = True
                     if not for_update:
                         raise e
+                    else:
+                        try:
+                            pk = instance.pk_dict()
+                            object = manager.get(pk)
+                            old_values = dict(object.get_field_dict(withstats=False))
+                        except Exception:
+                            old_values = {}
                 else:
                     raise e
 
@@ -874,7 +889,7 @@
                             if isinstance(e, ManagerImplError):
                                 pass
                         except UnboundLocalError:
-                            manager.update(instance, to_update)
+                            manager.update(instance, to_update, {})
                         mark_expire_one(model, instance.pk_dict())
 
         if composition_asso_model_list:
