كيف يمكن للمرء استخدام خيار أمر إدارة Django المخصص؟

StackOverflow https://stackoverflow.com/questions/4208006

  •  25-09-2019
  •  | 
  •  

سؤال

يخبرني مستند Django كيفية إضافة خيار إلى أمر إدارة Django المخصص الخاص بي ، عبر مثال:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--delete',
            action='store_true',
            dest='delete',
            default=False,
            help='Delete poll instead of closing it'),
    )

ثم تتوقف المستندات. كيف يمكن للمرء أن يكتب handle طريقة لهذه الفئة للتحقق مما إذا كان المستخدم قد قدم أ --delete اختيار؟ في بعض الأحيان ، يجعل Django الأشياء السهلة :-(

هل كانت مفيدة؟

المحلول

يمكنك أن تفعل ذلك مثل هذا:

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete poll'),
        make_option('--close',
            action='store_true',
            help='Close poll'),
    )

    def handle(self, close, *args, **kwargs):
        del_ = kwargs.get('del')

لاحظ أن بعض الكلمات الرئيسية في Python محفوظة حتى تتمكن من التعامل مع من يستخدمون **kwargs. وإلا يمكنك استخدام الوسائط العادية (كما فعلت مع close)

نصائح أخرى

اقتراح صغير حول تحديد الأوامر (الاسم الرئيسي ، dest) والتعامل مع القيم الافتراضية (في make_option وفي الأمر):

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--del',
            action='store_true',
            help='Delete all polls.',
            dest='your_name_for_delete',
            default=False),
        make_option('--close',
            action='store_true',
            help='Close all polls.'),
    )

    def handle(self, close, *args, **options):
        if options.get('your_name_for_delete'):
            Poll.objects.delete()
        if options.get('close', False):
            Poll.objects.update(closed=True)

في رمز Django ستجد "وسيطات الكلمات الرئيسية" (**kwargs) في كثير من الأحيان باسم **options, ، وهو أكثر توحيات (أنا متمسك بهذه الاتفاقية التسمية).

يمكن تحديد القيمة الافتراضية إما في Make_option ، أو من خلال dict.get الطريقة التي تسمح بقيمة افتراضية.

لا يوجد سبب لا تستخدمه على حد سواء الافتراضات ، يجب أن Command.handle تسمى الطريقة يدويًا ، حيث **options يمكن أن يفتقد القاموس هذا الإدخال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top