Index: django/test/utils.py
===================================================================
--- django/test/utils.py	(revision 11400)
+++ django/test/utils.py	(working copy)
@@ -80,8 +80,8 @@
     del mail.outbox
 
 
-def get_runner(settings):
-    test_path = settings.TEST_RUNNER.split('.')
+def get_runner(settings, wanted_method='TEST_RUNNER'):
+    test_path = getattr(settings, wanted_method).split('.')
     # Allow for Python 2.5 relative paths
     if len(test_path) > 1:
         test_module_name = '.'.join(test_path[:-1])
@@ -90,3 +90,12 @@
     test_module = __import__(test_module_name, {}, {}, test_path[-1])
     test_runner = getattr(test_module, test_path[-1])
     return test_runner
+
+def get_create_test_db(settings):
+    # Wrapper to deal with the strange way Django's core create_test_db is
+    # created. There really must be a more elegant solution.
+    if settings.TESTSERVER_DATABASE_CREATOR == 'django.db.connection.creation.create_test_db':
+        from django.db import connection
+        return connection.creation.create_test_db
+    else:
+        return get_runner(settings, wanted_method='TESTSERVER_DATABASE_CREATOR')
Index: django/conf/global_settings.py
===================================================================
--- django/conf/global_settings.py	(revision 11400)
+++ django/conf/global_settings.py	(working copy)
@@ -381,6 +381,10 @@
 # The name of the method to use to invoke the test suite
 TEST_RUNNER = 'django.test.simple.run_tests'
 
+# The name of the method to create a test database for use with the
+# testserver management command
+TESTSERVER_DATABASE_CREATOR = 'django.db.connection.creation.create_test_db'
+
 # The name of the database to use for testing purposes.
 # If None, a name of 'test_' + DATABASE_NAME will be assumed
 TEST_DATABASE_NAME = None
Index: django/core/management/commands/testserver.py
===================================================================
--- django/core/management/commands/testserver.py	(revision 11400)
+++ django/core/management/commands/testserver.py	(working copy)
@@ -15,13 +15,15 @@
 
     def handle(self, *fixture_labels, **options):
         from django.core.management import call_command
-        from django.db import connection
+        from django.conf import settings
+        from django.test.utils import get_create_test_db
 
         verbosity = int(options.get('verbosity', 1))
         addrport = options.get('addrport')
 
         # Create a test database.
-        db_name = connection.creation.create_test_db(verbosity=verbosity)
+        create_test_db = get_create_test_db(settings)
+        db_name = create_test_db(verbosity=verbosity)
 
         # Import the fixture data into the test database.
         call_command('loaddata', *fixture_labels, **{'verbosity': verbosity})
Index: docs/ref/settings.txt
===================================================================
--- docs/ref/settings.txt	(revision 11400)
+++ docs/ref/settings.txt	(working copy)
@@ -1110,6 +1110,16 @@
 
 .. _Testing Django Applications: ../testing/
 
+.. setting:: TESTSERVER_DATABASE_CREATOR
+
+TESTSERVER_DATABASE_CREATOR
+---------------------------
+
+Default: ``'django.db.connection.creation.create_test_db'``
+
+The name of the method to use to create the database used by the
+:ref:`testserver` management command.
+
 .. setting:: TIME_FORMAT
 
 TIME_FORMAT
