Search code examples
pythondjangodjango-models

How to have a Python script for a Django app that accesses models without using the manage.py shell?


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 manage.py shell.

What do I need to add to my script to achieve this?

EDIT:

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)

Solution

  • 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.