summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2007-03-23 02:51:09 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2007-03-23 02:51:09 +0000
commite21a4c8d016e48fb9935e250fe8908c666fb1bbd (patch)
tree48b333575355e96acbb11dbf7882b666b9ddf9db
parent6a7a15586009d2b81d907ef792cdf6cd955931dd (diff)
Fixed #3779 -- Resolved problem with order of creation of m2m tables during syncdb. Well spotted, Ben Slavin, and thanks for the very helpful test case.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4780 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/management.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/django/core/management.py b/django/core/management.py
index 25fb73d8ce..091c38b637 100644
--- a/django/core/management.py
+++ b/django/core/management.py
@@ -280,7 +280,7 @@ def get_sql_delete(app):
from django.db import backend, connection, models, get_introspection_module
introspection = get_introspection_module()
- # This should work even if a connecton isn't available
+ # This should work even if a connection isn't available
try:
cursor = connection.cursor()
except:
@@ -512,6 +512,7 @@ def syncdb(verbosity=1, interactive=True):
created_models = set()
pending_references = {}
+ # Create the tables for each model
for app in models.get_apps():
app_name = app.__name__.split('.')[-2]
model_list = models.get_models(app)
@@ -533,6 +534,11 @@ def syncdb(verbosity=1, interactive=True):
cursor.execute(statement)
table_list.append(model._meta.db_table)
+ # Create the m2m tables. This must be done after all tables have been created
+ # to ensure that all referred tables will exist.
+ for app in models.get_apps():
+ app_name = app.__name__.split('.')[-2]
+ model_list = models.get_models(app)
for model in model_list:
if model in created_models:
sql = _get_many_to_many_sql_for_model(model)
@@ -542,7 +548,7 @@ def syncdb(verbosity=1, interactive=True):
for statement in sql:
cursor.execute(statement)
- transaction.commit_unless_managed()
+ transaction.commit_unless_managed()
# Send the post_syncdb signal, so individual apps can do whatever they need
# to do at this point.