У меня есть команда django ниже, где я могу передать модель автомобиля в качестве аргумента, и она работает. Однако я хочу добавить функциональность к списку моделей без необходимости сначала передавать модель. Например, вызов python manage.py car_models --list_models
не сработает, так как он требует чего-то для удовлетворения model
arg, тогда как что-то вроде python manage.py car_models Cruze --list_models
будет работать, даже если с точки зрения UX знать модель автомобиля до того, как вы ее перечислите, невозможно.
tl; dr, я хочу иметь обязательный аргумент model
, если не используется тег --list_models
. Кто-нибудь знает решение этого?
class Command(BaseCommand):
help = 'Car models'
def add_arguments(self, parser):
parser.add_argument('model', help='model of car')
# I want to make it so that if a user says `python manage.py car_models --list_models`,
# the user doesn't get yelled at for not passing in a model arg
parser.add_argument(
'--list_models',
'-lm',
dest='list_models',
action='store_true',
help='List available car models',
)
def handle(self, *args, **options):
if options['list_models']:
print(['Cruze', 'Tahoe', 'Impala'])
return
print("Your car is {}".format(options['model']))
nargs='?'
принимается взаимоисключающей группой. Сделайте эту группу «обязательной». Я могу добавить пример позже. - person hpaulj   schedule 28.06.2017