やる気がストロングZERO

やる気のストロングスタイル

【Django】Custom Command と ArgumentParserの使い方メモ

DjangoでCustom commandの作り方とその時使うArgumentParserの使い方のざっくりメモ

参考)
カスタム django-admin コマンドの実装 | Django documentation | Django
ArgumentParserの使い方を簡単にまとめた - Qiita

app_dir/management/commands/以下にファイルを配置する。

from django.core.management.base import BaseCommand, CommandError

# BaseCommandを継承したCommandクラスを定義する  
class Command(BaseCommand): 
    help = '-hでヘルプ表示させるときに表示される部分。コマンドの概要などを記入'

    def add_arguments(self, parser): #コマンド引数の定義
        
        # int型の必須引数の定義
        parser.add_argument('id', type=int, help='なんかidを指定してください')

        # str型のオプション引数の定義。nargs='*'指定で、--option aa bb ccという感じに複数指定できる。
        # nargs='+'とすると、引数は1つ以上指定しないとエラーになる。
        parser.add_argument('-o', '--option', type=str, nargs='*', help='なんかオプションを指定してください')

    def handle(self, *args, **options): # コマンド処理を定義する

         #options[引数名]で引数を取得できる。
        self.stdout.write(self.style.SUCCESS('id = "%s"' % options['id']))

        # nargsを指定した引数はコレクションで入っている。
        for option in options['option']: 
            self.stdout.write(self.style.SUCCESS('option = "%s"' % option))