So, I end up with a file like this that I call add_regions.py. I can just put it in my project directory and run python add_regions.py and it will be aware of my Django settings and therefore models, etc. This is how it looks with a Pinaxified manage.py script as the base.
#!/usr/bin/env python
import sys
from os.path import abspath, dirname, join
try:
import pinax
except ImportError:
sys.stderr.write("Error: Can't import Pinax. Make sure you are in a virtual environment that has Pinax installed or create one with pinax-boot.py.\n")
sys.exit(1)
from django.conf import settings
from django.core.management import setup_environ, execute_from_command_line
try:
import settings as settings_mod # Assumed to be in the same directory.
except ImportError:
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
sys.exit(1)
# setup the environment before we start accessing things in the settings.
setup_environ(settings_mod)
sys.path.insert(0, join(settings.PINAX_ROOT, "apps"))
sys.path.insert(0, join(settings.PROJECT_ROOT, "apps"))
def run():
from django.contrib.gis.utils import LayerMapping
from attractions.models import Area
mapping = {'name':'REGION', 'poly': 'Polygon'}
lm = LayerMapping(Area, 'data/v2/ct_regions.shp', mapping, transaction_mode='autocommit')
lm.save()
mapping = {'name':'SUB_NAME','poly':'Polygon'}
lm = LayerMapping(Area, 'data/v2/ct_suburbs.shp', mapping, transaction_mode='autocommit')
lm.save()
if __name__ == "__main__":
run()