Django カスタム管理コマンド オプションはどのように使用しますか?

StackOverflow https://stackoverflow.com/questions/4208006

  •  25-09-2019
  •  | 
  •  

質問

Django のドキュメントには、例を使用して Django カスタム管理コマンドにオプションを追加する方法が記載されています。

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--delete',
            action='store_true',
            dest='delete',
            default=False,
            help='Delete poll instead of closing it'),
    )

その後、ドキュメントは停止します。どのように書くでしょうか handle ユーザーが指定したかどうかをチェックするこのクラスのメソッド --delete オプション?時々、Django は簡単なことを難しくします :-(

役に立ちましたか?

解決

あなたはこのようにそれを行うことができます:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete poll'),
        make_option('--close',
            action='store_true',
            help='Close poll'),
    )

    def handle(self, close, *args, **kwargs):
        del_ = kwargs.get('del')

あなたは**kwargsを使用して、それらを扱うことができるので、Pythonでいくつかのキーワードが予約されていることを実行(Do)ノート。そうでなければ(私はcloseで行ったように)あなたが通常の引数を使用することができます。

他のヒント

コマンドの定義に関するちょっとした提案 (キー名、 dest) およびデフォルト値の処理 ( make_option そしてコマンド内):

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete all polls.',
            dest='your_name_for_delete',
            default=False),
        make_option('--close',
            action='store_true',
            help='Close all polls.'),
    )

    def handle(self, close, *args, **options):
        if options.get('your_name_for_delete'):
            Poll.objects.delete()
        if options.get('close', False):
            Poll.objects.update(closed=True)

Django コードには「キーワード引数」(**kwargs) としてよく名前が付けられます **options, 、これはより示唆的です (私はこの命名規則に固執しています)。

デフォルト値は、make_option で指定するか、 dict.get メソッドは、デフォルト値を可能にします。

使わない理由はない 両方 デフォルトで、 Command.handle メソッドは手動で呼び出されます。 **options 辞書にこのエントリが見つからない可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top