diff --git a/django/db/backends/schema.py b/django/db/backends/schema.py
index 638ae08..dfe7d47 100644
--- a/django/db/backends/schema.py
+++ b/django/db/backends/schema.py
@@ -262,7 +262,8 @@ class BaseDatabaseSchemaEditor(object):
             })
         # Make M2M tables
         for field in model._meta.local_many_to_many:
-            self.create_model(field.rel.through)
+            if field.rel.through._meta.auto_created:
+                self.create_model(field.rel.through)
 
     def delete_model(self, model):
         """
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 3c022d6..8dd75ba 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1996,6 +1996,8 @@ class ManyToManyField(RelatedField):
             kwargs['to'] = self.rel.to
         else:
             kwargs['to'] = "%s.%s" % (self.rel.to._meta.app_label, self.rel.to._meta.object_name)
+        if getattr(self.rel, 'through', None) is not None:
+            kwargs['through'] = self.rel.through
         # If swappable is True, then see if we're actually pointing to the target
         # of a swap.
         swappable_setting = self.swappable_setting
