Django カスタム管理コマンド オプションはどのように使用しますか?
-
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
辞書にこのエントリが見つからない可能性があります。
所属していません StackOverflow