だいぶ前に「PythonでDjangoを使ったバッチ処理」で説明していますが、別のやり方です。というか、Djangoとしてはこっちが正しいんだと思います。
まずは任意のプロジェクトがあって、プロジェクトにappというアプリケーションが作成されているものとして進めます。
そこで、app(アプリケーションフォルダ)の下に「management」というフォルダを作成、中に__init__.pyを配置します。__init__.pyは空でいいです。
次に、managementフォルダの中に「commands」というフォルダを作成、またもやcommandsフォルダのなかに__init__.pyを配置します。もちろん、空で大丈夫です。
そして、commandsフォルダの中に「mycommand.py」を配置します。これが今回のメインになります。ここまでで以下の構成になっていると思います。
プロジェクトルート/
| app/
| | management/
| | | commands/
| | | | __init__.py
| | | | mycommand.py
| | | __init__.py
| | __init__.py
| | models.py
| | tests.py
| | views.py
| __init__.py
| manage.py
| settings.py
| urls.py
これでやっとバッチ処理が書けます。mycommand.pyを開いて、
#! /usr/local/bin/python # -*- coding: utf-8 -*- from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, *args, **options): print "hello command."
これでOK!
python manage.py mycommand
で実行できます。もちろんDjangoのmodelとかも触れます。*argsがあるから引数もOK!
こっちのほうがきれいにまとまりますね。
Python2.7、Django1.3.1で動作しています。試してませんが、もっと古いDjangoでも動くのではないかと。