2012-05-13 18 views
8

मेरे पास django-admin कस्टम कमांड है जिसका उपयोग मैं अपने डेटाबेस को नई जानकारी के साथ पॉप्युलेट करने के लिए करता हूं। फिर, सब कुछ काम करता है।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-व्यवस्थापक कस्टम आदेश से दो तर्क पर पारित करने के लिए जहां दूसरा तर्क है वैकल्पिक -> यानी (पहला, अंतिम = कोई नहीं)?

जो मैं उपयोग करना चाहता हूं उसके नीचे छद्म कोड: "manage.py xyz (first1, last1) (first2, last2) < - या इस

की कुछ भिन्नता मैंने स्टैंडअलोन फ़ंक्शन के रूप में इसे उचित रूप से स्वीकार करने के लिए फ़ंक्शन डीईएफ को पहले ही बदल दिया है। मुझे यकीन नहीं है कि मैं अब 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

संबंधित मुद्दे