我正在尝试为我的django命令添加一些参数。 我的命令将执行一个SQL查询,我想 有一个可选参数--first_row和if --first_row 指定用户必须指定第二个段--last_row。
以下是我的尝试:
from django.core.management.base import BaseCommand, CommandError
import time
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('--first_row', type=int)
parser.add_argument('--last_row', type=int)
def handle(self, *args, **options):
import argparse
parser = argparse.ArgumentParser()
self.add_arguments(parser)
start = time.time()
args = parser.parse_args()
if args.first_row:
print "first row is %d" % (args.first_row)
end = time.time()
self.stdout.write(self.style.SUCCESS("Operation took %d seconds" % (end-start)))
但是当我运行我的命令时,我得到了这个输出:
manage.py > query_db --first_row 1 --last_row 5
usage: manage.py [-h] [--first_row FIRST_ROW] [--last_row LAST_ROW]
manage.py: error: unrecognized arguments: query_db
Process finished with exit code 2
我做错了什么?
答案 0 :(得分:1)
您不应在ArgumentParser
方法中实例化新的handle
。它不知道query_db
参数,因此您得到unrecognized arguments: query_db
错误。
关于如何在this question处理相互包容的论点,有一些建议。如果first_row
中存在options
但last_row
不存在,则可以使用第一个建议并引发错误:
from django.core.management import CommandError
def add_arguments(self, parser):
parser.add_argument('--first_row', type=int)
parser.add_argument('--last_row', type=int)
def handle(self, *args, **options):
if options['first_row'] is not None and options['last_row'] is None:
raise CommandError("--last_row is required when --first_row is specified)
...