Dos argumentos en el comando personalizado django-admin

Tengo un comando personalizado de django-admin que uso para llenar mi base de datos con nueva información. De nuevo, todo funciona.

Sin embargo, ahora he cambiado mis modelos y funciono ligeramente para aceptar dos argumentos como una tupla: nombre y apellido, en lugar de solo “nombre”.

Código anterior abajo – trabajando. Ejecute usando “manage.py xyz name1 name2 name3 … etc. (espacio entre los diferentes argumentos)

from django.core.management.base import BaseCommand, CommandError from detail.models import ABC from detail.parser import DEF class Command(BaseCommand): args = '' help = 'Populates the ABC class database' def handle(self, *args, **options): for symbol in args: try: info = DEF(name) 

¿Es posible pasar dos argumentos desde el comando personalizado django-admin donde el segundo argumento es opcional -> ie (primero, último = Ninguno)?

Pseudocódigo debajo de lo que me gustaría ejecutar usando … “manage.py xyz (first1, last1) (first2, last2) <- o alguna variación de esto

Ya he cambiado la función DEF para aceptar esto apropiadamente como una función independiente. Simplemente no estoy seguro de cómo puedo hacer que el comando django-admin funcione ahora.

Es completamente posible, aunque django.core.management no proporciona una herramienta específica para hacerlo. Puede analizar los argumentos pasados ​​a través del argumento de palabra clave args . Tendrá que encontrar una syntax para hacerlo (definir la syntax en el atributo de help del comando probablemente sería una buena idea).

Suponiendo que la syntax es firstname.lastname , o simplemente firstname en el caso de que se omita el apellido, puede hacer algo como:

 def handle(self, *args, **options): for arg in args: try: first_name, last_name = arg.split('.') except ValueError: first_name, last_name = arg, None info = DEF(first_name, last_name) 

Y los usuarios del comando pueden pasar argumentos como este:

 $ python manage.py yourcommand -v=3 john.doe bill patrick.bateman