9

我有一个有效的django-admin 自定义命令,我用它来用新信息填充我的数据库。同样,一切正常。

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

下面的以前的代码 - 工作。使用“manage.py xyz name1 name2 name3...等运行(不同参数之间的空格)

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)

是否可以从 django-admin 自定义命令传递两个参数,其中第二个参数是可选的 --> 即(第一个,最后一个 = 无)?

下面是我想运行的伪代码...“manage.py xyz (first1, last1) (first2, last2) <-- 或者这个的一些变体

我已经更改了函数 DEF 以将其作为独立函数适当地接受。我只是不确定如何让 django-admin 命令现在工作。

4

1 回答 1

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)

该命令的用户可以像这样传递参数:

$ python manage.py yourcommand -v=3 john.doe bill patrick.bateman
于 2012-05-13T02:49:15.767 回答