Help us understand the problem. What is going on with this article?

Djangoでカスタムコマンドを実装してみよう

More than 1 year has passed since last update.

きっかけ

コマンド一つでExcelのデータをDBに移してくれたら、docker-compose.ymlとかに処理が書けて楽だよね。

環境

  • macOS 10.14.5
  • Django 2.2とかそこらへん

実装

1. サブコマンドとなるファイルを作る

以下のような構造でディレクトリとhoge_command.pyを配置

.
├── app
│   ├── __init__.py
│   ├── apps.py
│   ├── management
│   │   └── commands
│   │       └── hoge_command.py
│   ├── models.py
│   └── views.py
│ 
そのほかのファイル

2. hoge_command.pyにコマンドの機能を記述

BaseCommand を継承し、以下の関数をオーバーライドすることで実装できる。

hoge_command.py
from django.core.management import BaseCommand


class Command(BaseCommand):
    help = 'コマンドの説明'

    # コマンドのオプションを実装。必要なければ実装しなくていい。
    def add_arguments(self, parser):
        parser.add_argument('opt1', help='必須オプション')
        parser.add_argument('--opt2', help='任意オプション')

    # コマンドのメイン関数。オプションは options で取得できる。
    def handle(self, *args, **options):
        # この中に好きな処理を書こう!
        self.stdout.write(self.style.SUCCESS('コマンド'))
        self.stdout.write(options.__str__())

3. コマンドを実行してみる

$ python manage.py hoge_command
usage: manage.py hoge_command [-h] [--opt2 OPT2] [--version] [-v {0,1,2,3}]
                                 [--settings SETTINGS]
                                 [--pythonpath PYTHONPATH] [--traceback]
                                 [--no-color] [--force-color]
                                 opt1
manage.py hoge_command: error: the following arguments are required: opt1

正常(?)にオプション opt1 が必要とエラーが出ますね。
では、opt1 をしっかり渡してあげましょう。

$ python manage.py hoge_command abc
コマンド
{'verbosity': 1, 'settings': None, 'pythonpath': None, 'traceback': False, 'no_color': False, 'force_color': False, 'opt1': 'abc', 'opt2': None}

いい感じですね。

4. ヘルプを表示してみる

$ python manage.py hoge_command -h

で、コマンドの説明とhelpの一覧を見れます。長いので結果は割愛。

終わりに

以上、カスタムコマンドの実装でした。
それでは、良いDjangoライフを!

参考サイト

Django カスタムコマンドを実装する
カスタム django-admin コマンドの実装

menta
Django + Vue.js によるWebアプリケーション開発経験あり。 詳細はGithubにて公開中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away