+from django.core.management.base import NoArgsCommand
+from optparse import make_option
+ help = "Runs a Python interactive interpreter."
+ requires_model_validation = False
+ def handle_noargs(self, **options):
+ # XXX: (Temporary) workaround for ticket #1796: force early loading of all
+ # models from installed apps.
+ from django.db.models.loading import get_models
+ loaded_models = get_models()
+ # Set up a dictionary to serve as the environment for the shell, so
+ # that tab completion works on objects that are imported at runtime.
+ # Put all of the models into the local namespace.
+ for model in loaded_models:
+ imported_objects[model.__name__] = model
+ try: # Try activating rlcompleter, because it's handy.
+ # We don't have to wrap the following import in a 'try', because
+ # we already know 'readline' was imported successfully.
+ # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system
+ # conventions and get $PYTHONSTARTUP first then import user.
+ pythonrc = os.environ.get("PYTHONSTARTUP")
+ if pythonrc and os.path.isfile(pythonrc):
+ # This will import .pythonrc.py as a side-effect