2012-05-13 77 views
8

我有,我用它来填充我用新信息数据库工作 Django的管理员自定义命令。再次,一切正常。两种说法在Django管理员自定义命令

但是,我现在已经改变了我的模型和函数略微接受两个参数作为元组 - 名字姓氏,而不是只是“名称”。下面

前面的代码 - 工作。运行使用“manage.py XYZ名1名2 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) 

是否有可能在两个参数传递从Django的管理员自定义命令,其中第二个参数是可选 - >即(首先,最后=无)?

下面我想要使用的伪代码...“manage.py xyz(first1,last1)(first2,last2)< - 或者这

一些变化,我已经改变了功能DEF适当地接受这个作为一个独立的功能。我只是不确定如何让django-admin命令立即工作。

回答

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 
+0

谢谢!这很好。我原本希望有两个独立的参数,但是它的工作原理是一样的。 – snakesNbronies

+3

@modocache -v = 3?它会做什么? – GThamizh

+2

这个答案是过时的,Django的现在有一个内置的'add_arguments'方法,这是在V1.8中加入。请参阅:https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ – neuronet