Index: django_src/django/db/models/fields/related.py
===================================================================
--- django_src/django/db/models/fields/related.py	(revision 4410)
+++ django_src/django/db/models/fields/related.py	(working copy)
@@ -629,6 +629,7 @@
             limit_choices_to=kwargs.pop('limit_choices_to', None),
             raw_id_admin=kwargs.pop('raw_id_admin', False),
             symmetrical=kwargs.pop('symmetrical', True))
+        self.db_table = kwargs.pop('db_table', None)
         if kwargs["rel"].raw_id_admin:
             kwargs.setdefault("validator_list", []).append(self.isValidIDList)
         Field.__init__(self, **kwargs)
@@ -651,7 +652,10 @@
 
     def _get_m2m_db_table(self, opts):
         "Function that can be curried to provide the m2m table name for this relation"
-        return '%s_%s' % (opts.db_table, self.name)
+        if self.db_table:
+            return self.db_table
+        else:
+            return '%s_%s' % (opts.db_table, self.name)
 
     def _get_m2m_column_name(self, related):
         "Function that can be curried to provide the source column name for the m2m table"
Index: django_src/docs/model-api.txt
===================================================================
--- django_src/docs/model-api.txt	(revision 4410)
+++ django_src/docs/model-api.txt	(working copy)
@@ -874,6 +874,9 @@
                              force Django to add the descriptor for the reverse
                              relationship, allowing ``ManyToMany`` relationships to be
                              non-symmetrical.
+			     
+    ``db_table``             The name of the table to create for storing the m2m data. 
+                             If this isn't given, Django will use ``app_label + '_' + table1 + '_' + table2``. 
 
     =======================  ============================================================
 
