2012-05-13 12 views
8

私はデータベースに新しい情報を入力するために使用するdjango-adminカスタムコマンドがあります。繰り返しますが、すべてが機能します。django-adminカスタムコマンドの2つの引数

しかし、モデルと関数を少し変更して、2つの引数をタプルとして受け入れるようにしました。最初の名前はです。

以下の前のコード - 作業中です。 「manage.py XYZ名1名2 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) 

が、それは2番目の引数があるジャンゴ管理者カスタムコマンドからの二つの引数を渡すことは可能ですオプション - > ie(first、last = None)?

以下のコードを使って実行したいと思っている以下の疑似コード... "manage.py xyz(first1、last1)(first2、last2)< - またはこれのいくつかのバリエーション

私はスタンドアロン機能としてこれを適切に受け入れるようにDEF機能を変更しました。私はちょうどdjango-adminコマンドがどのように動作するのか分かりません。

答えて

13

django.core.managementは完全に可能ですが、具体的なツールはありません。 argsキーワード引数を使って渡された引数を解析できます。これを行うための構文を考え出す必要があります(コマンドのhelp属性の構文を定義するとよいでしょう)。そのような引数を渡すことができ

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) 

とコマンドのユーザー:構文がfirstname.lastname、または最後の名前は、あなたのような何かを行うことができます省略されている場合にだけfirstnameであると仮定すると、

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

ありがとうございました!それはうまくいった。もともと私は2つの別々の引数を持つことを望んでいましたが、これは同じように動作します。 – snakesNbronies

+3

@modocache -v = 3?それは何をするでしょうか? – GThamizh

+2

この回答は廃止され、djangoにはv1.8で追加された 'add_arguments'メソッドが組み込まれました。参照:https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ – neuronet

関連する問題