--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -612,10 +612,10 @@ class AutoField(Field):
             return None
         return int(value)
 
-    def contribute_to_class(self, cls, name):
+    def contribute_to_class(self, cls, name, virtual_only=False):
         assert not cls._meta.has_auto_field, \
                "A model can't have more than one AutoField."
-        super(AutoField, self).contribute_to_class(cls, name)
+        super(AutoField, self).contribute_to_class(cls, name, virtual_only=virtual_only)
         cls._meta.has_auto_field = True
         cls._meta.auto_field = self
 
@@ -777,8 +777,8 @@ class DateField(Field):
         else:
             return super(DateField, self).pre_save(model_instance, add)
 
-    def contribute_to_class(self, cls, name):
-        super(DateField,self).contribute_to_class(cls, name)
+    def contribute_to_class(self, cls, name, virtual_only=False):
+        super(DateField,self).contribute_to_class(cls, name, virtual_only=virtual_only)
         if not self.null:
             setattr(cls, 'get_next_by_%s' % self.name,
                 curry(cls._get_next_or_previous_by_FIELD, field=self,
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -252,8 +252,8 @@ class FileField(Field):
             file.save(file.name, file, save=False)
         return file
 
-    def contribute_to_class(self, cls, name):
-        super(FileField, self).contribute_to_class(cls, name)
+    def contribute_to_class(self, cls, name, virtual_only=False):
+        super(FileField, self).contribute_to_class(cls, name, virtual_only=virtual_only)
         setattr(cls, self.name, self.descriptor_class(self))
 
     def get_directory_name(self):
@@ -328,8 +328,8 @@ class ImageField(FileField):
         self.width_field, self.height_field = width_field, height_field
         super(ImageField, self).__init__(verbose_name, name, **kwargs)
 
-    def contribute_to_class(self, cls, name):
-        super(ImageField, self).contribute_to_class(cls, name)
+    def contribute_to_class(self, cls, name, virtual_only=False):
+        super(ImageField, self).contribute_to_class(cls, name, virtual_only=virtual_only)
         # Attach update_dimension_fields so that dimension fields declared
         # after their corresponding image field don't stay cleared by
         # Model.__init__, see bug #11196.
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1456,7 +1500,7 @@ class ManyToManyField(RelatedField):
                     data = [choices_list[0][0]]
         return smart_text(data)
 
-    def contribute_to_class(self, cls, name):
+    def contribute_to_class(self, cls, name, virtual_only=False):
         # To support multiple relations to self, it's useful to have a non-None
         # related name on symmetrical relations for internal reasons. The
         # concept doesn't make a lot of sense externally ("you want me to
@@ -1466,7 +1510,7 @@ class ManyToManyField(RelatedField):
         if self.rel.symmetrical and (self.rel.to == "self" or self.rel.to == cls._meta.object_name):
             self.rel.related_name = "%s_rel_+" % name
 
-        super(ManyToManyField, self).contribute_to_class(cls, name)
+        super(ManyToManyField, self).contribute_to_class(cls, name, virtual_only=virtual_only)
 
         # The intermediate m2m model is not auto created if:
         #  1) There is a manually specified intermediate, or
--- a/django/db/models/fields/subclassing.py
+++ b/django/db/models/fields/subclassing.py
@@ -43,11 +43,11 @@ def make_contrib(superclass, func=None):
     case that the existing contribute_to_class() calls all the necessary
     superclass methods.
     """
-    def contribute_to_class(self, cls, name):
+    def contribute_to_class(self, cls, name, virtual_only=False):
         if func:
-            func(self, cls, name)
+            func(self, cls, name, virtual_only=virtual_only)
         else:
-            super(superclass, self).contribute_to_class(cls, name)
+            super(superclass, self).contribute_to_class(cls, name, virtual_only=virtual_only)
         setattr(cls, self.name, Creator(self))
 
     return contribute_to_class
