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

时间:2012-05-13 02:25:23

标签: python django django-admin arguments

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

但是,我现在已经稍微改变了我的模型和功能,接受了两个参数作为元组 - 名字姓氏,而不仅仅是“名字”。

以下代码 - 工作。使用“manage.py xyz name1 name2 name3 ... etc.(不同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)

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

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

我已经将DEF函数更改为适当接受它作为独立函数。我只是不确定如何才能让django-admin命令正常工作。

1 个答案:

答案 0 :(得分: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