tutorial español python django django-admin

python - español - django tutorial



Error del comando personalizado de Django: argumentos no reconocidos (2)

En django 1.8 debes agregar argumentos a tu comando:

class Command(BaseCommand): ... def add_arguments(self, parser): parser.add_argument(''username'') parser.add_argument(''password'')

add_argument() método add_argument() de argparse se documenta aquí .

ACTUALIZACIÓN : de forma predeterminada, los argumentos se pasan en el parámetro options , por lo que el método handle() debería tener este aspecto:

def handle(self, *args, **options): username = options[''username''] password = options[''password''] ...

Y no es necesario que compruebe la longitud de la lista de argparse ya que se realiza mediante argparse . Este es el método recomendado, pero si desea usar el argumento args , debe usar el "modo de compatibilidad" y nombrar el argumento agregado como args :

class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument(''args'') def handle(self, *args, **options): if len(args) != 2: ...

Lea la nota lateral "Cambiado en Django 1.8" en el primer capítulo de la documentación (justo después del ejemplo closepoll.py ).

ACTUALIZACIÓN2 : Aquí está el ejemplo completo de trabajo:

from django.core.management.base import BaseCommand class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument(''username'') parser.add_argument(''password'') def handle(self, *args, **options): username = options[''username''] password = options[''password''] return u''Username: %s Password: %s'' % (username, password)

Estoy intentando crear un comando similar a createsuperuser que tomará dos argumentos (nombre de usuario y contraseña)

Está funcionando bien en Django 1.7 pero no en 1.8. (También estoy usando python3.4)

este es el codigo que escribi

myapp / management / commands / createmysuperuser.py

from django.core.management.base import BaseCommand, CommandError from django.contrib.auth.models import User class Command(BaseCommand): help = ''Create a super user'' def handle(self, *args, **options): if len(args) != 2: raise CommandError(''need exactly two arguments for username and password'') username, password = args u, created = User.objects.get_or_create(username=username) if created: u.is_superuser = True u.is_staff = True u.set_password(password) u.save() else: raise CommandError("user ''%s'' already exist" % username) return "Password changed successfully for user ''%s''" % u.username

y cuando intento ejecutar este comando

$ python manage.py createmysuperuser myuser mypassword

Me sale este error

usage: manage.py createmysuperuser [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] manage.py createmysuperuser: error: unrecognized arguments: myuser mypassword

pero cuando no paso ningún argumento, se genera CommandError que se espera.

CommandError: need exactly two arguments for username and password


Para cambios mínimos, simplemente agregue el método add_arguments() en la clase de Comando.

def add_arguments(self, parser): parser.add_argument(''args'', nargs=''*'')

Puedes seguir usando args como antes.