django-admin自定义命令中的两个参数

sna*_*ies 9 python django arguments django-admin

我有一个工作的 django-admin自定义命令,用于使用新信息填充我的数据库.一切都行得通.

但是,我现在已经稍微更改了我的模型和函数,以接受两个参数作为元组 - 名字姓氏,而不仅仅是"名字".

以下代码 - 工作.使用"manage.py xyz name1 name2 name3 ...等运行(不同args之间的空格)

from django.core.management.base import BaseCommand, CommandError
from detail.models import ABC
from detail.parser import DEF

class Command(BaseCommand):
    args = '<name...>'
    help = 'Populates the ABC class database'

    def handle(self, *args, **options):
        for symbol in args:

            try:
                info = DEF(name)
Run Code Online (Sandbox Code Playgroud)

是否可以从django-admin自定义命令传递两个参数,其中第二个参数是可选的 - > ie(first,last = None)?

伪代码低于我想要运行的..."manage.py xyz(first1,last1)(first2,last2)< - 或者这个的一些变化

我已经更改了DEF函数以适当地接受它作为一个独立的函数.我只是不确定如何才能让django-admin命令正常工作.

mod*_*che 13

这完全有可能,虽然django.core.management没有提供这样做的具体工具.您可以解析通过args关键字参数传递的参数.你必须提出这样做​​的语法(在help命令的属性中定义语法可能是个好主意).

假设语法是firstname.lastname,或者仅firstname在省略姓氏的情况下,您可以执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

命令的用户可以传递参数,如下所示:

$ python manage.py yourcommand -v=3 john.doe bill patrick.bateman
Run Code Online (Sandbox Code Playgroud)

  • @modocache -v = 3?它会做什么? (3认同)
  • 这个答案已经过时了,django现在有一个内置的`add_arguments`方法,它在v1.8中添加了.请参阅:https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ (3认同)