Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Browse files

Skip model validation when models are known good.

In some situations Django calls model validation when the models are
already known good. This is most visible in tests, which use flush
and loaddata commands. This resulted in around 10% overhead when
running tests under sqlite.
  • Loading branch information...
1 parent 583f1d7 commit 4fdd378beb81a86d826d7ee83c7d2250ed958be1 @akaariai akaariai committed
8 django/core/management/
@@ -198,9 +198,9 @@ def execute(self, *args, **options):
Try to execute this command, performing model validation if
needed (as controlled by the attribute
- ``self.requires_model_validation``). If the command raises a
- ``CommandError``, intercept it and print it sensibly to
- stderr.
+ ``self.requires_model_validation``, except if force-skipped). If the
+ command raises a ``CommandError``, intercept it and print it sensibly
+ to stderr.
show_traceback = options.get('traceback', False)
@@ -226,7 +226,7 @@ def execute(self, *args, **options):
self.stdout = options.get('stdout', sys.stdout)
self.stderr = options.get('stderr', sys.stderr)
- if self.requires_model_validation:
+ if self.requires_model_validation and not options.get('skip_validation'):
output = self.handle(*args, **options)
if output:
3  django/core/management/commands/
@@ -160,4 +160,5 @@ def model_installed(model):
# Load initial_data fixtures (unless that has been disabled)
if load_initial_data:
from import call_command
- call_command('loaddata', 'initial_data', verbosity=verbosity, database=db)
+ call_command('loaddata', 'initial_data', verbosity=verbosity,
+ database=db, skip_validation=True)
8 django/test/
@@ -468,13 +468,14 @@ def _fixture_setup(self):
databases = [DEFAULT_DB_ALIAS]
for db in databases:
- call_command('flush', verbosity=0, interactive=False, database=db)
+ call_command('flush', verbosity=0, interactive=False, database=db,
+ skip_validation=True)
if hasattr(self, 'fixtures'):
# We have to use this slightly awkward syntax due to the fact
# that we're using *args and **kwargs together.
call_command('loaddata', *self.fixtures,
- **{'verbosity': 0, 'database': db})
+ **{'verbosity': 0, 'database': db, 'skip_validation': True})
def _urlconf_setup(self):
if hasattr(self, 'urls'):
@@ -826,7 +827,8 @@ def _fixture_setup(self):
'verbosity': 0,
'commit': False,
- 'database': db
+ 'database': db,
+ 'skip_validation': True,
def _fixture_teardown(self):

0 comments on commit 4fdd378

Please sign in to comment.
Something went wrong with that request. Please try again.