4

I want to use py manage.py own_command.

I got the following code:

from django.core.management.base import BaseCommand


class Command(BaseCommand):
    help = 'create user'

    def add_arguments(self, parser):
        parser.add_argument('--username', type=str, help='set username')
        parser.add_argument('--password', type=str, help='set password')
        parser.add_argument('--email', type=str, help='set password')
        parser.add_argument('--group', type=list, default=[], action='append', help='set group(s) like ["basic", "advanced"]')
        parser.add_argument('--permission', type=list, default=[], action='append', help='set permission(s) like ["delete", "write"]')

>py manage.py create_app_user --username dustin --password hdf --email "" --group ["admin", "basic"
]

creates

usage: manage.py create_app_user [-h] [--username USERNAME]
                                 [--password PASSWORD] [--email EMAIL]
                                 [--group GROUP] [--permission PERMISSION]
                                 [--version] [-v {0,1,2,3}]
                                 [--settings SETTINGS]
                                 [--pythonpath PYTHONPATH] [--traceback]
                                 [--no-color]
manage.py create_app_user: error: unrecognized arguments: basic

]

I found solutions for django <= 1.7 BUT not for >=2.1

3
  • Have you tried putting the --group parameter in quotes, e.g. '["admin", "basic"]' Commented Nov 21, 2019 at 9:09
  • @OsmanOmar its not duplicate, as I wrote in the bottom --> your ticket is solution for django <=1.7 Commented Nov 21, 2019 at 9:25
  • @Steve, same erroursly output Commented Nov 21, 2019 at 9:26

1 Answer 1

8

You only need to specify either nargs='*', to allow 0 or more values, or nargs='+' to allow 1 or more values, eg:

parser.add_argument(
    '--group',
    nargs='*',
    help='set group(s) like "basic", "advanced"',
)

Also, you need to call your command without square brackets or commas:

py manage.py create_app_user --username dustin --password hdf --email "" --group "admin" "basic"
Sign up to request clarification or add additional context in comments.

4 Comments

almoust, but output group = kwargs['group'] looks like member of group(s): [[['a', 'd', 'm', 'i', 'n'], ['b', 'a', 's', 'i', 'c']]]
Right, you actually don't need type=list, action, and default, they are inferred from nargs
perfect. parser.add_argument('--group', nargs='+', help='set group(s) like "basic" "advanced"')
Cool, please accept the answer if it solved your issue

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.