diff --git a/django/core/meta/__init__.py b/django/core/meta/__init__.py
index c6bcb09e4b..d8e2d250bd 100644
--- a/django/core/meta/__init__.py
+++ b/django/core/meta/__init__.py
@@ -718,8 +718,9 @@ def method_save(opts, self):
     non_pks = [f for f in opts.fields if not f.primary_key]
     cursor = db.db.cursor()
     add = not bool(getattr(self, opts.pk.name))
-    for f in non_pks:
-        f.pre_save(self, getattr(self, f.name), add)
+    if add:
+        for f in non_pks:
+            f.pre_save_add(self, getattr(self, f.name))
     db_values = [f.get_db_prep_save(getattr(self, f.name)) for f in non_pks]
     # OneToOne objects are a special case because there's no AutoField, and the
     # primary key field is set manually.
diff --git a/django/core/meta/fields.py b/django/core/meta/fields.py
index 34027a8d7a..959cd0a033 100644
--- a/django/core/meta/fields.py
+++ b/django/core/meta/fields.py
@@ -82,10 +82,10 @@ class Field(object):
         else:
             self.db_index = db_index
 
-    def pre_save(self, obj, value, add):
+    def pre_save_add(self, obj, value):
         """
-        Hook for altering the object obj based on the value of this field and
-        and on the add/change status.
+        Hook for altering the object obj based on the value of this field,
+        during the add stage.
         """
         pass
 
@@ -280,8 +280,8 @@ class DateField(Field):
             value = str(value)
         return Field.get_db_prep_lookup(self, lookup_type, value)
 
-    def pre_save(self, obj, value, add):
-        if self.auto_now or (self.auto_now_add and add):
+    def pre_save_add(self, obj, value):
+        if self.auto_now or self.auto_now_add:
             setattr(obj, self.name, datetime.datetime.now())
 
     def get_db_prep_save(self, value):
@@ -483,8 +483,8 @@ class TimeField(Field):
             value = str(value)
         return Field.get_db_prep_lookup(self, lookup_type, value)
 
-    def pre_save(self, obj, value, add):
-        if self.auto_now or (self.auto_now_add and add):
+    def pre_save_add(self, obj, value):
+        if self.auto_now or self.auto_now_add:
             setattr(obj, self.name, datetime.datetime.now().time())
 
     def get_db_prep_save(self, value):