I'm writing a script to import some model objects into the database my django application uses. In the past I've solved this by running
./manage.py shell and then
import myscript. I'm sure there's a better way. I'd like to be able to call a script from anywhere on my HD using
python scriptname.py, and in the first few lines of that script it would do whatever imports / other operations necessary so that it can access model objects and behave as though it was run using
What do I need to add to my script to achieve this?
Based on @Melug's answer, with addition of dynamically setting Python path to address the 'anywhere on my HD' part of the question:
import sys sys.path.append('c:\\my_projec_src_folder') from myproject import settings from django.core.management import setup_environ setup_environ(settings)
You need to setup django environment first:
from your_project import settings from django.core.management import setup_environ setup_environ(settings)
At last import your models, everything goes just like django.
Since Django 1.4 you should avoid using
setup_environ(settings) (post by Melug) because it is deprecated. Use the following instead and you will be able to access your model
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings") # your imports, e.g. Django models from your_project_name.models import Location # From now onwards start your script..
Here is an example to access and modify your model:
if __name__ == '__main__': # e.g. add a new location l = Location() l.name = 'Berlin' l.save() # this is an example to access your model locations = Location.objects.all() print locations # e.g. delete the location berlin = Location.objects.filter(name='Berlin') print berlin berlin.delete()
class Location(models.Model): name = models.CharField(max_length=100)